我有一个 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/