我遇到了这段代码:
#!perl
use strict;
my %hash;
while(my $line = <>) {
chomp($line);
$hash{$line}++;
}
map {print $_ ."\n"} keys %hash;
我想理解语句while(my $line = <>)
和map {print $_ ."\n"} keys %hash;
答案 0 :(得分:2)
<>
不是正则表达式,而是你从句柄中读取的方式。
以下是I/O operators上的perl文档。
具体做法是:
null文件句柄&lt;&gt;很特别:它可以用来模拟sed和awk的行为,以及任何其他带有文件名列表的Unix过滤器程序,对所有输入的每一行做同样的事情。来自&lt;&gt;的输入来自标准输入,或来自命令行中列出的每个文件。以下是它的工作原理:第一次&lt;&gt;如果进行评估,则检查@ARGV数组,如果为空,则将$ ARGV [0]设置为“ - ”,打开时会为您提供标准输入。然后将@ARGV数组作为文件名列表处理。
因此,除非您通过@ARGV
指定了文件名,否则<>
将从标准输入中读取。
答案 1 :(得分:1)
<>
不是正则表达式,它是空文件句柄中的readline
。
如果你写
while ( <STDIN> ) { ... }
然后您正在阅读STDIN
文件句柄。
但是如果你将<>
留空,那么Perl将从ARGV
文件句柄中读取,该句柄按顺序给出命令行中指定的所有文件的行({{1}的内容如果@ARGV
为空,则来自STDIN
(通常是键盘)。