Wait the light to fall

找到两个文件中共有的行

焉知非鱼

Find the Common Lines in Two Files

找出两个文件中共有的行, 顺序无关紧要 #

在 Perl 5 里, 你可以这样:

#!/usr/bin/env perl
use 5.010; use warnings; use strict;

my %filea = map { $_ => 1 } do { open my $fa, '<', 'filea' or die $!; <$fa> };
my %fileb = map { $_ => 1 } do { open my $fb, '<', 'fileb' or die $!; <$fb> };
for( keys %filea ){
    print if $fileb{$_};
}

在 Raku 中就长这样:

#!/usr/bin/env raku

my @a := "filea".IO.lines;
my @b := "fileb".IO.lines;
.say for keys( @a  @b );

因为 Raku 中的"惰性列表”, 底层实现能把工作分割成不同的任务并行执行, 然后在需要结果的时候返回给它们。所以, 这种情况下, @a@b 的填充可以同时运行.但是要点是, 如果你有耗费时间, 不彼此依赖的操作, 或者函数 A 要传递一个 item 列表给函数 B, 这些操作可能并行执行, 提高速度, 你不需要做任何线程相关的东西。非常赞!