小于和大于符号在一起

时间:2015-03-12 21:49:32

标签: perl

我遇到了这段代码:

#!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;

的含义

2 个答案:

答案 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(通常是键盘)。