Perl 5.16 中的 qr 操作

2024-02-25

我正在尝试修复一个非常旧的脚本,该脚本试图找到一个字符串FILE_DESC_LIMIT在文本文件中并将其更改为其他内容。

为此,我当前的脚本在 Perl 5.10 上运行良好,我发现它使用了正则表达式

    qr!^FILE_DESC_LIMIT=\d+(\s*)!;

但这在 Perl 5.16 中不起作用,所以我尝试打印这个表达式。 在 5.10 中我看到

    (?-xism:\bFILE_DESC_LIMIT=\d+(\s*))

在 Perl 5.16 中我看到

    (?^:^FILE_DESC_LIMIT=\d+(\s*))

I see qr正在添加-xism虽然5.16中没有添加,但为什么这里有差异呢?

如果我在正则表达式中明确添加它,它就会起作用。但我怀疑这个解决方案,因为 Perl 没有明确添加它,这里可能存在一些问题。

对于 Perl 5.16,我应该使用一些不同的方法吗? 为什么 Perl 改变了这种行为?

我的代码如下所示,我们正在创建一个正则表达式,然后使用正则表达式制定一个表达式,然后在打开的文件上求值,然后将求值的输出写入同一文件。

my atempRegex=qr!^FILE_DESC_LIMIT=\d+(\s*)!;
my $replaceSting => qq!FILE_DESC_LIMIT=$FileDescLimit\$1!

$tempRegex =~ s!\^!\\b!g if ($] =~ /5\.010/);

my $code .= "\$File =~ s!$tempRegex!$replaceSting!gsm;\n";

open (FH, "<$WORKING_DIR/$base_script_name.$$.tmp") || logWrite2(E,"-- 
ERROR: Unable to open $WORKING_DIR/$base_script_name.$$.tmp for reading 
($!)");

my $File = join("",<FH>);
close (FH);

eval $code;

open (FH, ">$WORKING_DIR/$base_script_name.$$.tmp") || logWrite2(E,"-- 
ERROR: Unable to open $WORKING_DIR/$base_script_name.$$.tmp for writing 
($!)");

print FH $File;
close (FH);

为了使其在 Perl 5.16 中工作,我所做的更改是,我将 -xism 修饰符显式添加到正则表达式中,并修改了 \b 修饰符条件

my $FileDescLimit=2048;
my $tempRegex=qr!^FILE_DESC_LIMIT=\d+(\s*)!;
my $replaceSting => qq!FILE_DESC_LIMIT=$FileDescLimit\$1!

if ($] >=5.016)
{
    $tempRegex=~ s!\^!-xism!;
}
$tempRegex =~ s!\^!\\b!g if ($] >=5.010);

my $code .= "\$File =~ s!$tempRegex!$replaceSting!gsm;\n";

open (FH, "<$WORKING_DIR/$base_script_name.$$.tmp") || logWrite2(E,"-- ERROR: Unable to open $WORKING_DIR/$base_script_name.$$.tmp for reading ($!)");

my $File = join("",<FH>);
close (FH);

eval $code;

open (FH, ">$WORKING_DIR/$base_script_name.$$.tmp") || logWrite2(E,"-- ERROR: Unable to open $WORKING_DIR/$base_script_name.$$.tmp for writing ($!)")
print FH $File;
close (FH);

我不知道问题是因为 -xism 修饰符还是因为 \b 修饰符,因为我看到脚本在版本 5.10 上进行了修改,并且显式添加了 \b 修饰符,可能真正的问题是这个修饰符。

参考下面的答案之一 ?^ 相当于 ?-xism ,我删除了代码

if ($] >=5.016)
{
    $tempRegex=~ s!\^!-xism!;
}

从我的脚本中,所以 -xism 不再是我的正则表达式的一部分,并且我在我的正则表达式中添加了 \b ,就像 Perl 版本 5.10 所做的那样,下面的代码替换了我的正则表达式中的第二个插入符号,(?^:^FILE_DESC_LIMIT=\ d+(\s*)) 与 \b,使用生成的正则表达式 (?^:\bFILE_DESC_LIMIT=\d+(\s*)) ,匹配并替换字符串

if ($] =~ /5\.016/)
{
    my $n=0;
    $Source =~ s/\^/++$n==2?"\\b":"\^"/ge
}

正如我在正则表达式教程中看到的 \b 用于定义单词边界并执行整个单词匹配,我不清楚为什么它无法匹配 FILE_DESC_LIMIT=2048 文件中的字符串不带 \b。


The 文档关于扩展模式 in perlre https://perldoc.perl.org/perlre.html#Extended-Patterns有这个

从 Perl 5.14 开始,"^"(脱字符号或扬抑符)紧接在"?"是一个简写形式,相当于d-imnsx。标志(除了"d") 可以跟随插入符号来覆盖它。但负号是不合法的。

在这些修饰符中,-imsx与您在 v5.10 中看到的相匹配,同时-n启用括号的捕获行为和d启用“默认”字符集行为。最后两个是新的修饰符

这些与您在 v5.10 中显示的值没有任何不同,因此您必须显示您的数据以及您所编写的内容才能改变行为

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Perl 5.16 中的 qr 操作 的相关文章

  • 如何使用 Perl 在 Unix 中获取文件创建时间

    如何使用 perl 在 unix 中获取文件创建时间 我有这个命令显示文件的最后修改时间 perl MPOSIX le print strftime d b Y H M localtime lstat 9 for ARGV file txt
  • 在 Perl 中确定范围重叠的最快方法

    我有两组范围 每个范围都是一对整数 开始和结束 表示单个较大范围的某些子范围 两组范围的结构与此类似 当然 将替换为实际数字 a ranges a 1 gt start gt end gt a 2 gt start gt end gt a
  • Log4Perl 将多个程序的日志记录捆绑到一个日志中

    CPAN 上是否有任何 Logger 它允许我将多个程序的日志捆绑到一个文件中 并在两个程序同时运行并并行调用 log4Perl 时同步并行日志记录 背景是我使用一个自定义附加程序来写入电子邮件 我想将所有电子邮件捆绑在一个文件中作为备份
  • Emacs cperl - 常量块中的缩进

    我正在运行基于 GNU Emacs 24 3 50 2 的 Aquamacs 3 0a cperl 版本是 6 2 当我编辑 Perl 常量块时 我得到了我不想要的额外缩进 use constant ONE gt 1 TWO gt 2 TH
  • 单台机器最快的 Perl IPC/消息队列是多少?

    我正在开发一个 主要 Perl 项目 并希望使用消息队列来相互隔离进程 我有这样的工作流程 输入 gt 接收器 gt 处理器 gt 输出 我需要每秒处理数百笔交易 所以速度是我最大的动力 对于这种类型的设置来说 最快的消息队列系统是什么 我
  • 无法在 Mac 上安装 DBD::mysql

    第一次发帖 格式可能不太对 请见谅 我一直在尝试使用 cpan 在 macOS Catalina 上安装 DBD mysql 但尚未成功 我使用了perlbrew 并尝试了mysql和mariaDB 但仍然没有成功 另外 我在网上研究了不同
  • 由于握手问题,PerL SSL 连接尝试失败

    我希望有人可以提供帮助 我正在使用 nagios 插件 check ilo2 health 该插件在我们的 OpenSuSE 系统上运行良好 但新的 Ubuntu 14 04 系统有问题 删除 nagios 的东西并运行 perl 基本上是
  • Perl:Chomping字符串后,它不打印字符串的值

    所以我目前正在尝试编写一个 perl 脚本来读取一个文件并写入另一个文件 目前 我遇到的问题是从解析的行中删除换行符 我输入这样的文件 BetteDavisFilms txt 1 Wicked Stepmother 1989 as Mira
  • 在 Perl 中组装 XML

    我需要对 NetApp 文件管理器进行 API 调用 我知道我需要发送什么原始 XML
  • 如何从 Perl 中的 Subversion 预提交挂钩访问提交的文件?

    我需要执行以下操作 用 Perl 编写预提交钩子 Hook 应检查所有提交的文件是否存在某些文本 如果未找到该文本则失败 基本上 我需要一个读取正在提交的文件的 Perl 钩子示例 我真的在寻找一些代码量最少的优雅解决方案 笔记 钩子应该使
  • 为什么Perl的SUPER调用不使用箭头方法?

    我注意到 当您调用超类的方法时 您需要执行以下操作 my self class gt SUPER new 为什么不是这样 my self class gt SUPER gt new 我怀疑是因为 class gt SUPER gt new
  • Perl Moose TypeDecorator 错误。我该如何调试?

    我最近遇到了一个问题 非常感谢您的见解 我在圣诞节前在 PerlMonks 上发布了类似的问题 并提供了一些从 MooseX Declare 切换的反馈 http www perlmonks org node id 877703 1 我现在
  • linux + ksh + 向下舍入或向上舍入 - 浮点数

    在我的 ksh 脚本中 我只需要计算整数 有时我会得到浮点数 例如 3 49 或 4 8 等 所以我需要根据以下规则将浮点数转换为整数 示例 3 49 will be 3 2 9 will be 3 4 1 will be 4 23 51
  • Perl 中的布尔函数应该返回什么值?

    简短的问题 在 Perl 代码库中一致表示真假的最佳方法是什么 1 0 1 Perl 原生布尔运算符的特殊空字符串 return undef 即空列表 问题背景 我们都知道 Perl 在布尔值方面非常灵活 就像大多数事情一样 例如 Perl
  • 这可以一行完成吗?

    我像这样提取MAC地址 my tmp split domain 123 123 123 123 at 00 11 22 33 44 55 ether on eth0 my vip tmp 3 但不使用临时变量可以完成吗 是的 它可以 my
  • 如何比较两个文件中的多列并在找​​到匹配时从另一列检索相应的值

    我有两个文件 File1 txt 和 File2 txt 我需要将 File1 中的三列 1 2 和 3 分别与 File2 的 4 5 和 6 进行比较 如果找到匹配项 我想从 File2 的第 2 列中检索相应的值并将其粘贴到输出中 T
  • 为什么子程序需要在声明其中使用的变量之后编写?

    假设我们有这段代码 为什么它会因显式包名称错误而失败 因为该函数仅在声明后才被调用 value use strict use warnings sub print value print n value my value 2 print v
  • Perl Tk 模块有哪些缺点?

    与在 Perl 中创建 GUI 的其他解决方案相比 Tk 模块有哪些缺点 我最近浏览了 Perl 的各种 gui 模块 这是我的总结 免责声明 最终我发现现有模块都不能满足我的需求 所以我开始编写自己的 gui 工具包 Tk 工作起来很不错
  • 使用 SIGINT 默认处理程序时从 system() 返回值

    我遇到了一些奇怪的返回值system 当子进程从终端接收到 SIGINT 时 解释一下 从 Perl 脚本parent pl I used system 运行另一个 Perl 脚本作为子进程 但我还需要通过 shell 运行子进程 所以我使
  • Perl 非贪婪

    我遇到非贪婪正则表达式 regex 的问题 我已经看到有关于非贪婪正则表达式的问题 但它们没有回答我的问题 Problem 我正在尝试匹配 lol 锚点的 href Note 我知道这可以通过 Perl HTML 解析模块来完成 我的问题是

随机推荐

  • 如何在 C# 中打印 PCL 文件?

    我有一个使用 打印到文件 生成的 PCL 文件 在 C 中以编程方式打印此文件的最佳方法是什么 当然 考虑到我要打印的打印机支持 PCL 我知道我可以通过从提示中调用来进行打印 copy filename pcl location prin
  • iOS App Store 提交:缺少图标 (Cordova)

    我正在制作 Cordova PhoneGap 应用程序并将其提交到 App Store 但是 我收到了一封电子邮件 其中包含以下消息 Invalid Icon Path No icon found at the path reference
  • SQL Server存储过程参数输出

    我有一个存储过程 为了这个问题的目的 我已经大大缩小了它的规模 但本质上我需要帮助的问题是这个 如果表中的一行xyz已更新 我需要将 ID 相互附加并输出回调用应用程序 更新按预期工作 问题在于我构建输出的方式 IPV ID Found 请
  • 在第三方 Django 应用程序中自定义模板

    我在 Django 项目中使用第三方应用程序 django social share 但我需要自定义模板 我不知道如何去做 我尝试的一切都继续使用默认模板 当前默认模板存储在 django social share django socia
  • 我在我的项目中添加 MPAndroidChart 但在我的 xml 中找不到 LineChart

    我想在我的项目中使用 MPAndroidChart 我在我的 gradle 中添加了该库 但在我的 xml 布局文件中 我找不到 Chart 我的 build gradle Module 是这样的 dependencies implemen
  • C# using 语句

    我真的很想把这件事从我的脑海里赶出去 请看下面的代码 using DataTable resultTable DBUtility GetSingleDBTableResult connectionString SELECT FROM MyD
  • SVG 图像未显示在 html 电子邮件中

    我已将 svg 图像嵌入到 html 电子邮件中 它显示在 iPhone 和桌面 Mac 邮件应用程序上 但未显示在我的 Mobileme Web 邮件上 有什么想法吗 这是代码 img src http ww
  • 使用第一类模块时,类型构造函数“...”将转义其范围

    给定一个简单的工厂 module type Factory sig type t val create unit gt t end module FactoryImpl Factory struct type t string let cr
  • 为什么 process.env.NODE_ENV 未定义?

    我正在尝试遵循有关 NodeJS 的教程 我不认为我错过了什么 但每当我打电话给process env NODE ENV我得到的唯一价值是undefined 根据我的研究 默认值应该是development 这个值是如何动态设置的以及它最初
  • 同时检查多个 URL 的页面加载时间

    如果 URL 作为输入给出 谁能指导我应该编写哪些 C 代码来获取每个 URL 的页面加载时间 OR 如果可能的话 请给我提供任何可以执行此操作的软件的链接 任何以多个 URL 作为输入并提供每个 URL 的页面加载时间的软件 您是否想要测
  • 模型执行后清除 Tensorflow GPU 内存

    我已经训练了 3 个模型 现在正在运行代码 按顺序加载 3 个检查点并使用它们运行预测 我正在使用 GPU 当第一个模型加载时 它会预先分配整个 GPU 内存 我希望用它来处理第一批数据 但完成后它不会卸载内存 当加载第二个模型时 使用两者
  • C# REST webservice身份验证问题

    在我之前的问题中here https stackoverflow com questions 3812625 c problem authenticating webservice between two webapplications我在
  • 如何在 VBA (Excel) 中使用变量设置属性

    采取这个代码 With ActiveSheet Shapes AddShape msoShapeRectangle x y w h TextFrame Parent Line Visible False Parent Fill ForeCo
  • 通用类型的 ASP.NET MVC 显示模板

    我正在尝试使用模型 ListModel 作为通用列表模型 我想在页面输入 Html DisplayForModel 但是 MVC 无法正确找到模板文件 ListModel cshtml 对于通用模型来说 它的工作方式必须有所不同 我应该如何
  • C linux相当于windows QueryPerformanceCounter

    Linux 中是否有等效的 C 函数用于读取 CPU 计数器及其频率 我正在寻找类似于 QueryPerformanceCounter 函数的东西 该函数读取现代 CPU 中的 64 位计数器 clock gettime 2 http li
  • HttpURLConnection conn.getRequestProperty 返回 null

    我正在尝试将一些数据推送到 BED 的 URL MDS CS 当我在代码中设置一些请求标头并提交请求时 提交的请求标头设置为null 这是我的代码 HttpURLConnection conn HttpURLConnection url o
  • 如何实现 D3 比例让孩子继承父母的颜色并带有刻度?

    我有一个 D3 js 树 它对节点和链接应用了不同的颜色 颜色是硬编码的 nodeUpdate select circle attr r 10 style fill function d if d name Top Level return
  • 使用 https 克隆项目 gitlab 时出错

    当我尝试使用 Https 协议克隆我的 Gitlab 项目时遇到问题 使用 git 协议一切正常 错误 Cloning into test fatal https XXXX XXXX XXXX XXXX user name test git
  • javax.xml.stream 包可从多个模块访问:、java.xml

    我有编译错误 The package javax xml stream is accessible from more than one module
  • Perl 5.16 中的 qr 操作

    我正在尝试修复一个非常旧的脚本 该脚本试图找到一个字符串FILE DESC LIMIT在文本文件中并将其更改为其他内容 为此 我当前的脚本在 Perl 5 10 上运行良好 我发现它使用了正则表达式 qr FILE DESC LIMIT d