私は2つのリストがあります:たPerl:2つのリストでペア要素
をmy @prefixes = ["abc", "def", "ghi", "jklmn"];
my @strings = ["abc123", "def456", "jklmnopqrst"];
「DEF所属する「ABC」と「def456」に所属する「ABC123」ように私は、各文字列の正しいプレフィックスを見つける必要があります「jklmnopqrst」は「jklmn」に属します。 すべての文字列は@prefixesに接頭辞を含みますが、すべての接頭辞に一致する文字列があります(「ghi」を参照)。
私はこのコードを持っている:
use List::Util qw(first);
...
foreach my $str (@strings) {
my $prefix = first { $_ eq substr($str, 0, length($_)) } @prefixes;
print "$prefix\n";
# do something with $str and $prefix together
}
しかし、それは働いていないが、私が間違って何Use of uninitialized value $prefix in concatenation (.) or string
を取得していますか?
更新日:これは簡単な修正です。私はリストを()ではなく[]で初期化しておくべきだった。これを閉じないようにするには、foreach
の声明をどのように取り除きますか?
オク、私はダムです。私は()の代わりに()を使って配列を初期化する必要がありました。 – papaiatis
'map'で - しかし' foreach'のように内部を処理する柔軟性はありません。 – zdim