Perlの配列に一致する要素が格納されているインデックスを取得する方法
Perlの配列に一致する要素が格納されているインデックスを取得する方法を紹介します。
1.問題点
次の配列があるとします。
my @list = ( 'a', 'b', 'c', 'd', 'e', 'f', 'g' );
この配列に「c」が含まれているかどうかを調べるには、grepを用いればOKです。
#!/usr/bin/perl
use strict;
my @list = ( 'a', 'b', 'c', 'd', 'e', 'f', 'g' );
if ( grep { $_ eq 'c' } @list ) {
print "OK";
} else {
print "NG";
}
が、配列に一致する要素が格納されている番号を取得する方法が分かりません。
上記の例の場合、「c」が格納されているインデックス「2」を取得したいです。
2.配列に一致する要素が格納されているインデックスを取得する
配列に一致する要素が格納されているインデックスを取得するには、grepのリスト部分に配列のインデックスを渡し、インデックスを使ってブロック内で配列の値をチェックします。
grep { $list[$_] eq 'c' } 0 .. $#list;
全体のコードは次のようになります。
#!/usr/bin/perl
use strict;
my @list = ( 'a', 'b', 'c', 'd', 'e', 'f', 'g' );
my ( $result ) = grep { $list[$_] eq 'c' } 0 .. $#list;
print $result;
grepの返却値は配列ですが、マッチする値がひとつであることが分かっていれば、上のようにスカラー変数に代入すればよいでしょう。
Posted by yujiro このページの先頭に戻る
- Perlでansibleライブラリを作成する方法
- perlのCPANモジュールからRPMを作成する方法
- Perlで「Subroutine permission redefined at~」を抑止する方法
- XML::Simpleのインストールでエラーになる場合の対処
- YAML::Tinyで「YAML::Tiny found bad indenting in line~」というエラーになる場合の対処
- Perlの正規表現を使って文字列をまとめて取得する方法
- Perlのハッシュでキーの有無を調べる方法
- perlで配列の途中の要素を削除する方法
- YAML::Tinyでコロンを利用する方法
- Perlで改行コードがCRのファイルを読み込む方法
- Perlで「Possible precedence issue with control flow operator」という警告の対処
- PerlのLWPで「Can't verify SSL peers without knowing which Certificate Authorities to trust」というエラーになったときの対処
- Perl+Windowsでファイルを再帰的にリネームする方法
- Perlプログラムの中でファイルの一部を書き換える方法
- Perlの「Bareword "%s" not allowed while "strict subs" in use~」というエラーについて
トラックバックURL
コメントする
greeting