2

在 Perl中读取 from 有什么作用<>?例如,以下将做什么?

print for(<>);
4

3 回答 3

8

所谓的菱形运算符 ( <>) 从 STDIN 或指定为命令行参数的文件名中逐行(在标量上下文中)读取。

来自perldoc perlop

空文件句柄<>很特殊:它可以用来模拟 sed 和 awk 的行为。输入来自<>标准输入或命令行中列出的每个文件。它是这样工作的:第一次<>求值,@ARGV检查数组,如果它为空,$ARGV[0]则设置为"-",打开时为您提供标准输入。然后将该@ARGV数组作为文件名列表进行处理。


在列表上下文中,<>返回所有行,每行存储为列表中的一个元素。

这意味着print for <>;它将做与 相同的事情print while <>;,尽管有更多的内存。

于 2011-12-07T06:38:30.903 回答
3

您已经找到了 Perl 中最神奇的部分。好吧,我相信还有更多神奇的东西,但是这个小习惯使编写用于 shell 管道文件操作的程序变得非常容易。

当不带任何参数运行<>时,将从标准输入中一次读取一行。

当使用参数运行时,它会将参数视为文件名,并依次从命名文件中读取一行。

一个简短的演示:

$ cat > print.pl
#!/usr/bin/perl -w
print for(<>);
$ chmod 755 print.pl 
$ echo hello world | ./print.pl 
hello world
$ ./print.pl print.pl 
#!/usr/bin/perl -w
print for(<>);
$ ./print.pl print.pl print.pl
#!/usr/bin/perl -w
print for(<>);
#!/usr/bin/perl -w
print for(<>);
$ 

我在那里手动输入程序;^D当你完全输入它时点击。

于 2011-12-07T06:41:30.120 回答
0

它从标准输入读取,一次一行,并将其存储到$_. print 然后默认打印出来$_,因为它没有给出参数。该程序从标准输入读取并回显到标准输出,直到到达 EOF。

于 2011-12-07T06:35:37.733 回答