在Perl中,我有以下代码:
my $val = "0";
for(my $z = 0; $z <= 14; $z++)
{
++$val;
if($val == 9) {
$val = "A";
}
print $val;
}
打印:
1 2 3 4 5 6 7 8 A B 1 2 3 4 5
然而它应该从B到C继续,从C到D等等,这背后的逻辑是什么?
答案 0 :(得分:5)
warnings会给你一个警告信息,如:
参数“B”在数字eq(==)
中不是数字
use warnings;
use strict;
my $val = "0";
for(my $z = 0; $z <= 14; $z++)
{
++$val;
if($val eq '9') { # <------------------
$val = "A";
}
print $val;
}
答案 1 :(得分:4)
引用perlop:
如果增加一个数字,或在数字上下文中使用的变量的变量,则会得到正常的增量。但是,如果变量仅在字符串上下文中使用,因为它已设置,并且其值不是空字符串并且与模式
/^[a-zA-Z]*[0-9]*\z/
匹配,则增量将以一个字符串,保留其范围内的每个字符,带进位... (强调添加)
$val == 9
是一个数字上下文。所以它打印A(你只是设置它),然后你得到B的神奇增量(它尚未在数字上下文中使用),但是你点击==
(在数字中使用它)上下文),所以当你再次到达++$val
时,B被视为数字(0)并递增为1。
您可以使用eq
进行字符串比较,从而保留神奇的增量,但您也可以这样说:
print 1 .. 8, 'A' .. 'F';