应该是简单的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");
Run Code Online (Sandbox Code Playgroud)
日志文件:
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
Run Code Online (Sandbox Code Playgroud)
我假设我可以通过对临时循环变量进行显式赋值来解决这个问题$compoundKey
,但我仍然有些神秘.我的代码中是否有一些我没有看到的错误?或者Perl中的"last"语句是否与C或Java中的"break"完全不同?
谢谢!
这不是last
声明,而是foreach
声明.
foreach循环遍历正常列表值,并将标量变量VAR依次设置为列表的每个元素.如果变量前面带有关键字my,则它是词法范围的,因此仅在循环中可见.否则,该变量隐含在循环的本地,并在退出循环时重新获得其前一个值.如果先前使用my声明了变量,它将使用该变量而不是全局变量,但它仍然本地化为循环.这种隐式定位仅在foreach循环中发生.(重点补充).
归档时间: |
|
查看次数: |
70 次 |
最近记录: |