Perl 正则表达式 'e' (eval) 修饰符带 s///

2023-12-24

我在理解 /e 正则表达式修饰符的简单用法时遇到了一些困难。

my $var = 'testing';
$_ = 'In this string we are $var the "e" modifier.';

s/(\$\w+)/$1/ee;

print;

返回:“在此字符串中,我们正在测试“e”修饰符。”

我不明白为什么需要两个“e”修饰符。据我所知, $1 应该从字符串中捕获“$var”,然后单个“e”修饰符应该能够用变量的值替换该变量。然而,我一定是误解了一些东西,因为仅使用一个“e”修饰符尝试上述代码并不能明显地替换字符串中的任何内容。

不好意思问这么简单的问题!

Thanks.


这不完全是一个“简单”的问题,所以不要自责。

问题是,用一个单一的/e,RHS 被理解为代码,其eval的结果用于替换。

那个 RHS 是什么?它是$1。如果您评价$1,你发现包含字符串 $var。它不包含所述变量的内容,只是$随后是一个v随后是一个a随后是一个r.

因此你必须评估它两次,一次是为了转动$1 into $var,然后再次将之前的结果转为$var到字符串中"testing"。你可以通过双倍来做到这一点ee上的修饰符s操作员 http://perldoc.perl.org/perlop.html#s%2fPATTERN%2fREPLACEMENT%2fmsixpodualgcer.

您可以通过运行它来轻松检查这一点/e与其中两个相比。这里有一个演示,以及使用符号解除引用的第三种方式 - 因为它引用包符号表,所以仅适用于包变量。

use v5.10;

our $str = q(In this string we are $var the "e" modifier.);
our $var = q(testing);

V1: {
    local $_ = $str; 
    s/(\$\w+)/$1/e;
    say "version 1: ", $_;

}

V2: {
    local $_ = $str;
    s/(\$\w+)/$1/ee;
    say "version 2: ", $_;
}

V3: {
    no strict "refs";
    local $_ = $str;
    s/\$(\w+)/$$1/e;
    say "version 3: ", $_;
}

运行时,会产生:

version 1: In this string we are $var the "e" modifier.
version 2: In this string we are testing the "e" modifier.
version 3: In this string we are testing the "e" modifier.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 正则表达式 'e' (eval) 修饰符带 s/// 的相关文章

随机推荐

  • Apache启动libphp7.3.so找不到

    我已经安装了 php 7 3 和 apache2 但是当我尝试启动 apache2 时 出现此错误 service apache2 start apache2 Syntax error on line 146 of etc apache2
  • 仅将 Maven 依赖项声明为测试运行时

    将 Maven 依赖项声明为仅用于测试运行时 而不是测试编译 类路径的最佳方法是什么 具体来说 我想要slf4j api 日志门面 作为典型的编译范围依赖项 但我想要slf4j simple 适用于单元测试的准系统实现 仅在测试运行时类路径
  • 这个 PowerShell 命令行引用/转义是怎么回事?

    我显然不知道自己在做什么 我终于让这个 PowerShell 命令可以工作了 但我不明白为什么它有效 我关心的是最后的 字符 C Program Files IIS Microsoft Web Deploy msdeploy exe ver
  • 在android中应用RGB滤色器后如何将图像保存在SD卡中

    目前我正在设计一个基于照片编辑的应用程序 在这样做时我遇到了一个问题 即 我已经完成了教程 如何为图像应用 RGB 滤色器 link http android er blogspot in 2012 09 adjust lightness
  • VS Code - git 存储库有太多活动更改,仅启用 Git 功能的子集

    我正在设置 VS Code 以处理保存在 BitBucket 中的现有 Salesforce 项目 我将存储库克隆到我的设备 现在当我打开 VS Code 时 我收到消息 C Users 我的存储库目录 处的 git 存储库有太多活动更改
  • 如何在Godot 4.0游戏引擎中实现可组合的角色/技能系统?

    我目前正在使用 Godot 尝试 MOBA 风格游戏的原型 我正在努力寻找一种管理角色及其技能的方法 所有角色都将具有相似的属性 姓名 生命值 奔跑速度 力量等 然而 所有角色的技能都会有所不同 尽管有些角色非常相似 例如基于投射物的技能将
  • 如何在 Buddypress 中获取用户名/显示名称?

    在 buddypress 默认模板中 发布某个活动的用户名显示如下 bp activity action 但这带来的不仅仅是用户名 有没有更简单的方法来获取用户对象 名称 WordPress 获取用户数据功能不起作用 因为它显示页面作者 而
  • Rails 日期验证与年龄

    在我的 Rails 应用程序中 有一个注册表单 其中包含 DOB 字段 用户的年龄不必超过 18 岁 我如何对此进行验证 我的出生日期格式是 mm dd yy 这个语法非常有趣 你可以这样做 old enough 10 23 2000 to
  • 如何在使用 cardUseCompatPadding 时覆盖 CardView 中的标准填充?

    当我使用 cardUseCompatPadding 在卡片视图中显示阴影时 顶部填充比左侧填充大 如何使两个填充相等 因为我的丝带看起来不漂亮 它在上面更大 谢谢
  • 在博览会应用程序上请求通知权限时收到错误

    我有一个简单的代码 要求过去有效的通知权限 但突然间 它给了我这个错误 错误 调用本机方法时遇到异常 在模块 ExpoNotificationPermissionsModule 上执行导出方法 requestPermissionsAsync
  • 如何使用 pybabel 在 jinja 2.10 {% trans %} 中转义 '%' 字符?

    我正在使用 jinja 2 10 和 pybabel 当我的模板包含以下代码 trans 块内有 字符 时 pybabel compile 不会翻译该字符串 提取的字符串 在 po 中 正常 但在结果页面上它根本没有被翻译 h3 class
  • 从 python 中的函数返回左值

    抱歉 我是 Python 新手 虽然这似乎是一个非常基本的问题 但在询问听众之前 我做了尽职调查 试图避免真正愚蠢的问题 我试图找出从函数返回左值的正确习惯用法 假设我有一个包含 64 个对象的容器 并且我希望能够返回对这些对象的引用 cl
  • Wordpress 中的 PhP 联系表单

    所以我买了一个主题 它有一个简单的 PHP 联系表单 允许用户互相发送消息 但是当发件人填写表单并提交时 电子邮件来自我的默认 WordPress 管理员电子邮件 而不是用户输入的电子邮件地址表格 因此 如果收件人尝试回复他们的电子邮件 邮
  • Google Apps 脚本 - 从模板创建的每个文档中都出现“需要授权”

    我有一个 Google 文档 它有一个自定义 UI 菜单 其中包含一个选项 可以将新页面添加到文档并用一些数据填充它 我使用此文档作为模板 通过 Web 应用程序为单个用户创建许多其他文档 因此 我的用户来到我的 web 应用程序 单击生成
  • Boost::bind 和 Boost Phoenix::bind 有什么区别?

    Boost bind 和 Boost Phoenix bind 有什么区别 phoenix bind就好像lambda bind返回一个表达式模板的函数 该模板记录它必须调用给定的函数 它们被设计为分别与phoenix 和lambda 一起
  • 使用 jQuery 克隆

    我有一个允许用户推荐朋友的表格 我想在 朋友电子邮件 和 朋友姓名 这两个输入字段下方添加一个链接 该链接将克隆 朋友框 一次并将其添加到下面 另外 好友邮箱 和 好友姓名 的name属性为name friend email 0 and n
  • 如何将张量转换为字符串

    我正在测试 tf data 这是现在批量提供数据的推荐方法 但是 我正在加载自定义数据集 因此我需要 str 格式的文件名 但是当创建 tf Dataset from tensor slices 时 它们是 Tensor 对象 def lo
  • 根据列聚合过滤选定的列

    我希望仅选择唯一值少于 3 个的列 我可以通过生成布尔掩码pl all n unique lt 3 但我不知道是否可以通过 Polars API 使用该掩码 目前 我正在通过 python 解决这个问题 有更惯用的方法吗 import po
  • Logcat 消息在短时间内消失

    有时 eclipse logcat 消息在关闭应用程序一小段时间后就会消失 大多不会那么短 如何让它永远不会自动消失 编辑 我的设备仍然连接 以及如何将其设置为即使在设备断开连接并在下次启动之前清除后也显示日志 这也发生在我身上 设备已连接
  • Perl 正则表达式 'e' (eval) 修饰符带 s///

    我在理解 e 正则表达式修饰符的简单用法时遇到了一些困难 my var testing In this string we are var the e modifier s w 1 ee print 返回 在此字符串中 我们正在测试 e 修