元素对我有两份名单:的Perl:在两个列表
my @prefixes = ["abc", "def", "ghi", "jklmn"];
my @strings = ["abc123", "def456", "jklmnopqrst"];
我需要找到每个字符串正确的前缀,使“ABC123”属于“ABC”和“def456”属于“DEF “和”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
有什么不对?
UPDATE:所以这是一个简单的修复。我应该使用()而不是[]初始化我的列表。为了不关闭这个,你将如何摆脱foreach
声明?
好的,我很笨。我应该用()而不是[]来初始化我的数组。 – papaiatis
使用'map' - 但是你没有像使用foreach一样处理内部的灵活性。 – zdim