【发布时间】:2019-02-27 05:01:47
【问题描述】:
应该是简单的 Perl 构造并没有像我预期的那样运行。
@closest 数组包含“NNN-NNN”形式的字符串。我试图找到初始“NNN”与特定值匹配的第一个数组元素。
由于我在循环外声明了$compoundKey,我希望它是持久的。循环按预期运行,当我得到匹配时退出。但是,代码退出循环后,$compoundKey 变量为空。 (查看代码后的日志输出。我正在寻找“83”。匹配的元素不是数组中的最后一个元素。)
my $compoundKey;
foreach $compoundKey (@closest)
{
logentry("In loop compoundKey is $compoundKey\n");
last if ($compoundKey =~ /^$RID/);
}
logentry("Outside loop compoundKey is $compoundKey\n");
日志文件:
2019-02-27 18:15:26: In loop compoundKey is 90-1287
2019-02-27 18:15:26: In loop compoundKey is 86-1223
2019-02-27 18:15:26: In loop compoundKey is 86-1235
2019-02-27 18:15:26: In loop compoundKey is 87-1316
2019-02-27 18:15:26: In loop compoundKey is 89-1219
2019-02-27 18:15:26: In loop compoundKey is 83-1224
2019-02-27 18:15:26: Outside loop compoundKey is
我假设我可以通过将临时循环变量显式分配给$compoundKey 来解决此问题,但我仍然有些迷惑。我的代码中是否有一些我没有看到的错误?还是 Perl 中的“last”语句的行为方式与 C 或 Java 中的“break”完全不同?
谢谢!
【问题讨论】:
-
当然我用的是“严格”。
-
另见List::MoreUtils 及其search 方法的全部范围,例如
firstval和firstidx