使用<>在Perl。如何使用它 ?
如果我们只是写
如果我们只是写
<>;
和
while(<>)
在这两种情况下,程序在做什么?
解决方法
上面的答案都是正确的,但是如果您了解UNIX的一般UNIX命令行用法,可能会更加明显。想要一个命令来处理多个文件是很常见的。例如。
ls -l *.c
命令行shell(bash等)将其转换为:
ls -l a.c b.c c.c ...
换句话说,除非模式不匹配,否则ls不会看到’* .c’。在命令提示符下尝试(不是perl):
echo *
你会注意到你没有得到*。
所以,如果shell正在给你一堆文件名,而你想依次查看每个人的数据,perl的<>运算符给你一个很好的方法,它把下一个文件的下一行(或stdin,如果没有文件命名)放入$ _(默认标量)。
这是一个穷人的grep:
while(<>) { print if m/pattern/; }
运行这个脚本:
./t.pl *
将打印出与给定模式匹配的所有文件的所有行。
cat /etc/passwd | ./t.pl
将使用猫生成一些文本行,然后通过perl中的循环来检查该模式。
所以你看到,虽然(<))让你得到一个非常标准的UNIX命令行行为...处理我给你的所有文件,或处理我管道给你的东西。