【发布时间】:2011-12-07 06:30:12
【问题描述】:
在 Perl 中读取 <> 的作用是什么?例如,下面会做什么?
print for(<>);
【问题讨论】:
标签: perl readfile diamond-operator
在 Perl 中读取 <> 的作用是什么?例如,下面会做什么?
print for(<>);
【问题讨论】:
标签: perl readfile diamond-operator
所谓的菱形运算符 (<>) 从 STDIN 或指定为命令行参数的文件名逐行(在标量上下文中)读取。
空文件句柄
<>很特别:它可以用来模拟 sed 和 awk 的行为。<>的输入来自标准 输入,或从命令行上列出的每个文件。这是怎么回事 工作:第一次评估<>,检查@ARGV数组, 如果为空,$ARGV[0]设置为"-",打开时 为您提供标准输入。然后将@ARGV数组作为 文件名列表。
在列表上下文中,<> 返回所有行,每行存储为列表中的一个元素。
这意味着print for <>; 将执行与print while <>; 相同的操作,尽管内存更大。
【讨论】:
您已经找到了 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。
【讨论】:
它从标准输入读取,一次一行,并将其存储到$_。 print 然后默认打印出$_,因为它没有给出参数。该程序从标准输入读取并回显到标准输出,直到到达 EOF。
【讨论】: