{{tag> note:perl grep}} ---json { "title":"目からウロコな配列の使い方(grep)", "description":"目からウロコな配列の使い方(grep)" } --- \\ ==== 目からウロコな配列の使い方(grep) ==== \\ 例えば my @array = (1, 3, 5, 7, 9); のような配列があって、値が5の要素番号(何番目か)を得たい場合を考えて my @r; for (my $i=0; $i<$#array+1; $i++) { printf "i=(%d)[%s]\n", $i, $array[$i]; push(@r, $i) if ( $array[$i] eq '5' ); } print join("\n", @r); って感じのコードを書いてみるが、 i=(0)[a] i=(1)[b] i=(2)[c] i=(3)[d] i=(4)[c] i=(5)[f] i=(6)[g] 5 となって、なんかスマート感がなく気持ちが悪いので、ネットで調べてみると、[[https://www.perlmonks.org/?node_id=488430|モンクさん]]が素晴らしいコードを教えてくれたのでメモ。\\ my @r = grep { $array[$_] eq '5' } 0 .. $#array; print join("\n", @r); grepは\\ grep { 条件 } リスト だけど、リストに配列のポインタ値をもって来るところが考えつかなかった。\\ リストはポインタ値が$_に入るので\\ $array[0] eq '5' $array[1] eq '5' $array[2] eq '5' $array[3] eq '5' $array[4] eq '5' $array[5] eq '5' : のような感じでポインタの値がかわるようになる仕組み。\\ \\ いろいろ考えられるけどすごいね。素晴らしい。\\ ~~DISCUSSION~~