这是我关于SO的第一个问题,很抱歉,如果这很愚蠢,但是当我最近在生产代码中遇到它时,这真的让我很困惑.我把我的问题归结为两个代码块,我希望它能做同样的事情,即为每次迭代生成一个随机数:
for my $num (0 .. 5) {
my $id = int rand 10;
print "$id\n";
}
Run Code Online (Sandbox Code Playgroud)
和
for (0 .. 5) {
my $tmp;
my $id = $tmp if $tmp;
$id = int rand 10 unless $id;
print "$id\n";
}
Run Code Online (Sandbox Code Playgroud)
第一个执行我期望它做的事情,但第二个执行任意数量的迭代相同的数字.$tmp在这种简化中总是未定义,所以它只是在那里显示行为,因为遗漏= $tmp if $tmp会产生我期望的结果.
我很欣赏为什么会发生这种情况.
Bor*_*din 11
究其原因,奇怪的现象是,你已作出声明的$id,以及分配给它,对真理的条件$tmp,这使Perl的发脾气.perldoc perlsyn有这个说来
注意:my,state或我们使用语句修饰符条件或循环结构修改的行为(例如,我的$ x if ...)是未定义的.my变量的值可以是undef,任何先前分配的值,或者可能是其他任何值.不要依赖它.perl的未来版本可能会与您尝试使用的perl版本有所不同.这里是龙.
如果您更改代码如下,您可以自己演示这一点,这很好.
for (0 .. 5) {
my $tmp;
my $id;
$id = $tmp if $tmp;
$id = int rand 10 unless $id;
print "$id\n";
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
343 次 |
| 最近记录: |