3

在 Perl 中是否有某种方式可以让我在第二行只提到一次 k:

my %k = (a=>1, b=>2, c=>undef);
say for grep{!$k{$_}} keys %k;
4

3 回答 3

4

是的:

$b or say $a while ($a,$b) = each %k

但这并没有更好(更糟糕的是,IMO),所以我会坚持你所拥有的。

于 2013-09-11T19:18:25.510 回答
4

使用mappgrepp在 CPAN 模块中找到的List::Pairwise

use List::Pairwise qw(grepp mapp);
my %k = (a=>1, b=>2, c=>undef);
say for mapp { $a } grepp { !$b } %k;
于 2013-09-11T19:30:16.107 回答
2

使用each

my %k = ( a => 1, b => 2, c => undef ); 
while ( my ($i, $j) = each %k ) { say $i unless $j };
于 2013-09-11T19:18:24.420 回答