mapで要素除去

意外と知られてないかと思ったのでメモ。

grep {$_} map { $_ ? $N/$_ : undef } @_;

って書くの?

mapで特定要素を除外したいときとか - ロックスターになりたい

mapを使って特定の要素を除去する方法ですが、上記の方法はこの用途であれば問題ないですが、undefという要素もちゃんと要素として見なしたい場合には困ります。

で、どうするかというと、mapの戻り値に空リストを返すことで要素の除去ができます。

my $n = 1000;
my @array = (2, 1, 0, -1, -2);

my @new_array = map { $_ ? $n/$_ : () } @array;

たまーに使うので覚えておくと吉です。