perl - 为什么 Perl 在这里提示未终止的字符串?

标签 perl

我有一个 Perl 脚本,它在 HPUX 11i v3 上的 Perl 5.005 下运行良好,但在我的 Ubuntu 11.04 机器上的 Perl 5.10 下会导致一个小问题。

它归结为这样一行:

open (CMD, "do something | grep -E 'sometext$' |");

(它实际上是捕获 ps -ef 输出以查看进程是否正在运行,但我认为这并不重要 (a))。

现在它在 HPUX 环境中运行良好,但是,当我在 Ubuntu 下尝试时,我得到:

sh: Syntax error: Unterminated quoted string

通过插入大量的调试语句,我将它追踪到那个有问题的行,然后开始一个接一个地删除字符,直到它停止提示。幸运的是,$ 是我尝试的第一个,它不再给我错误,所以我将行更改为:

open (CMD, "do something | grep -E 'sometext\$' |");

而且它运行良好(无论如何在 Linux 下 - 我没有在 HPUX 上测试过,因为我今天无法访问那台机器 - 如果它确实有效,我会使用那种方法,但我仍然喜欢知道为什么这是个问题)。

所以很明显 $ 在我的 Linux 环境下“吞噬”了结束单引号,但在 HPUX 环境下显然不是。

我的问题很简单,为什么? 5.005 和 5.10 之间肯定没有任何重大变化。还是我缺少某种配置项?


(a) 但是,如果您知道没有外部 CPAN 模块(即仅安装基准 Perl 5.005)的更好方法,我会很高兴知道它。

最佳答案

$' 是一个特殊变量(参见 perldoc perlvar)。 5.005 是许多版本之前的版本,因此正则表达式引擎中可能发生了某些更改以使该变量不同(尽管它似乎也在 5.005 中)

至于更好的方法,您至少可以只在管道中运行“ps -ef”并在 perl 中执行“grep”。

关于perl - 为什么 Perl 在这里提示未终止的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8663015/

相关文章:

regex - 在 Perl 中重新定义 Word 字符类

perl - 错误 : "Can' t locate object method "new" via package"in Perl

c# - PerlNet 的局限性是什么?

ruby - 如何在没有 ruby​​ 的情况下列出 init.d 脚本的文件

Perl 的 Chomp : Chomp is removing the whole word instead of the newline

perl - 设置不活动超时 Perl (Mojo) 子进程

perl - 在非零返回码上捕获 Perl 反引号

linux - 使用 ForkManager 在 Linux 上运行 Perl 脚本

perl - 如何在 fork 进程中获取随机数?

regex - Perl 正则表达式替换计数