使用perl s/.../.../e将内容打印到文件描述符

3

我在以下perl代码中遇到了一个错误:

#!/usr/bin/perl
open $fh, '>', 'myfile.txt' or die;
s|(.*)|print $fh "Hello",$1," how are you"|e;
close $fh or die

在./script.pl第3行,发现字符串出现在操作符的位置,附近是"$fh "Hello""("Hello"前面缺少操作符?)
我使用s|(.*)|...|e将字符串的开头再次写入,例如Hello Hello。
期望的输出文件myfile.txt是:
Hello Hello, how are you?
有没有办法使它与实际操作一起运行?
还是必须以另一种方式更改s|(.*)|...|e操作?

为什么要使用sed,当你可以使用Perl中最强大的工具之一——纯简单的正则表达式,并且非常容易完成相同的事情。 - Mario Kirov
3
为什么你想在替换中写入文件?Perl 会对你的代码感到困惑,但你可以通过使用文件句柄的“表达式语法”来帮助它:s|(.*)|print {$fh} "Hello",$1," how are you";|e;。但更好的代码应该是:s|(.*)|Hello,$1, how are you|; print $fh $_; - Corion
@Corion 感谢您的回复,您提供的更好的代码是一个解决方案! - user7364588
1个回答

5

有趣的是,有效的方法是用花括号将文件句柄括起来:

s/(.*)/print {$fh} "Hello",$1," how are you"/e;

无论如何,始终使用它们是一个好习惯。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接