[perl] mapで条件によってgrepの用に値をとばす。
空の配列 () を返せば、skipされる。
$ perl -e '@a = map { ($_%2) ? 1: () } (1..5);print "values=".join(",",@a)."\n"; print "count=".scalar @a."\n"' values=1,1,1 count=3
0, undef, ""ではだめ。どれもその値になる。
[kenshin@house4 ~]$ perl -e '@a = map { ($_%2) ? 1: 0 } (1..5);print "values=".join(",",@a)."\n"; print "count=".scalar @a."\n"' values=1,0,1,0,1 count=5 [kenshin@house4 ~]$ perl -e '@a = map { ($_%2) ? 1: undef } (1..5);print "values=".join(",",@a)."\n"; print "count=".scalar @a."\n"' values=1,,1,,1 count=5 [kenshin@house4 ~]$ perl -e '@a = map { ($_%2) ? 1: "" } (1..5);print "values=".join(",",@a)."\n"; print "count=".scalar @a."\n"' values=1,,1,,1 count=5
何もしないのは、0を返していることと同じ。
これは、if文が偽の時は $_%2 の演算結果である0が返っているだけ。
perl -e '@a = map { if ($_%2){ 1 } } (1..5);print "values=".join(",",@a)."\n"; print "count=".scalar @a."\n"' values=1,0,1,0,1 count=5
実は空文を返せばskipできる。0を返さないのがちょっと不思議。
perl -e '@a = map { if ($_%2){ 1 }else{} } (1..5);print "values=".join(",",@a)."\n"; print "count=".scalar @a."\n"' values=1,1,1 count=3