[perl] mapではまり中

二つの違いがよく分からない

0が返るときと返らないときの違いは何?

perl -le 'print map { $_ if (!$seen{$_}++) } qw(1 1 2 2);'
12
perl -le 'print map { $_ if ($_%2) } qw(1 1 2 2);'
1100


分かった! 単純に論理否定(!)演算子が値を返さないからだ

$ perl -le 'map {print !$seen{$_}++ } (2, 2, 1, 1);'
1

1

結論:空配列 () を返すのが無難。

 perl -le 'print map { !$seen{$_}++ ? $_:() } (2,2,1,1)'