在 Perl中读取 from 有什么作用<>
?例如,以下将做什么?
print for(<>);
所谓的菱形运算符 ( <>
) 从 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。