寻求解释神奇的Perl共享行Oneliner
我发现了这个(如果你一定要知道的话),它引起了我的注意寻求解释神奇的Perl共享行Oneliner,perl,Perl,我发现了这个(如果你一定要知道的话),它引起了我的注意 $ perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' file1 file2 我确实懂perl。但我不知道这是怎么做到的 $ perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' <(echo 'zz\nabc\n3535\ndef') <(echo 'abc\ndef\nff') abc def $perl-ne'print i
$ perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' file1 file2
我确实懂perl。但我不知道这是怎么做到的
$ perl -ne 'print if ($seen{$_} .= @ARGV) =~ /10$/' <(echo 'zz\nabc\n3535\ndef') <(echo 'abc\ndef\nff')
abc
def
$perl-ne'print if($seen{$}.=@ARGV)=~/10$/'
- 表达式
$seen{$}.=@ARGV
将@ARGV
中的元素数附加到$seen{$}
- 在读取第一个文件时,
@ARGV
只包含一个元素——第二个文件名
- 在读取第二个文件时,
@ARGV
为空
$\uuu
的值用作%seen
散列的键,是从任一文件读取的最新一行
- 如果任何给定行仅出现在第一个文件中,则只有
1
将附加到哈希元素
- 如果任何给定行仅出现在第二个文件中,则只有
0
将附加到哈希元素
- 如果两个文件中都出现了任何给定的行,则会在哈希元素中追加一个
1
,然后再追加一个0
,将其设置为10
- 读取第二个文件时,如果附加的
0
字符的值为10
,则打印该行
- 这将导致两个文件中出现的所有行都打印到输出
好的。。所以这个(这里的许多项目之一)我不知道。。。如果程序只有一行,那么它将用作每个参数上的行过滤器(连续读取每个参数)?所以本质上我们有一个双重嵌套的循环。都是含蓄的。哇。@StevenLu:-n
选项为从输入文件读取的每一行执行代码。这只是一个单独嵌套的循环,因为文件是按顺序读取的,就像它们是连接在一起的一样。Perl将另一个文件名移出@ARGV
,并在每次需要更多数据时打开它。哦,好的,我忽略了-n
标志的重要性。现在不那么令人惊讶了。