Perl:使用 -e 从命令行处理文件。传递的文件是如何访问的?

Perl: processing files from the command line with -e. How is the passed file accessed?

当我调用 Perl 时

perl -e '' foo.txt

如何访问foo?

如果我使用 -i,我可以就地编辑 foo.txt。我想 foo.txt 与某个文件句柄关联并打开以供直接访问?句柄是什么?如果我使用 -0777,文件是从 STDIN(比如)流式传输并存储在标量字符串中,还是打开并读入这样的字符串?哪个字符串?

我知道这可能是微不足道的,但我似乎找不到答案。

非常感谢您的帮助。

How is foo accessed?

它在 @ARGV,和往常一样(特别是 $ARGV[0])。

-i并没有真正运行到位。它重命名原始文件,并使用原始名称创建一个新文件。由 @ARGV 中的所有文件串联形成的伪文件的输入句柄称为 ARGV-i 处理的输出句柄称为 ARGVOUT.

-0777 只是将 $/(也称为输入记录分隔符)设置为 undef,这导致 readline 到 return 整个文件为单个 "line".

有关详细信息,请参阅

首先,-i 本身不做任何事情;您必须实际读取 ARGV 文件句柄(空 <> 或 -n 或 -p 开关)。

当你这样做并设置了 -i 时,它将在命令行上打开文件(到 ARGV 文件句柄)并使用你指定的扩展名重命名它(或者如果你没有指定一个则取消链接它扩展名)并使用 ARGVOUT 文件句柄打开一个具有原始名称的新文件,选择它作为要打印到的默认文件句柄。

使用 -0777 不会改变任何内容,只是当您从文件中读取时,您将获得全部内容,而不仅仅是一行。