【问题标题】:Print into file descriptor using perl s/.../.../e使用 perl s/.../.../e 打印到文件描述符
【发布时间】:2019-02-05 17:40:45
【问题描述】:

我遇到以下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的预期输出是

你好,你好吗?

有没有办法让它与实际操作一起运行?

或者我必须以其他方式更改s|(.*)|...|e 操作吗?

【问题讨论】:

  • 当您可以使用 Perl 中最强大的工具之一 - 简单的 RegEx 并非常轻松地完成相同的事情时,为什么还要使用 sed。
  • 为什么要从替换中写入文件? Perl 对您的代码感到困惑,但您可以通过使用文件句柄的“表达式语法”来帮助它:s|(.*)|print {$fh} "Hello",$1," how are you";|e;。但更好的代码是:s|(.*)|Hello,$1, how are you|; print $fh $_;.
  • @Corion 感谢您的回复,您提供的更好的代码是一个解决方案!

标签: perl


【解决方案1】:

有趣的是,有效的方法是将文件句柄括在大括号中:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-25
    • 2011-01-31
    • 1970-01-01
    • 2014-04-18
    相关资源
    最近更新 更多