循环遍历Perl中的字符

时间:2012-01-31 20:16:53

标签: perl for-loop

我遇到了很大的困难,在使用for循环在Perl中循环遍历符号时,会发现一些奇怪的行为。 此代码段的工作方式与预期一致:

for (my $file = 'a'; $file le 'h'; $file++) {
    print $file;
}

输出:abcdefgh

但是当我尝试向后循环符号时,就像这样:

for (my $file = 'h'; $file ge 'a'; $file--) { 
    print $file;
}

给我以下结果。

输出:h

当涉及符号时,可能减量运算符的行为不像我想的那样吗?

有人对此事有任何想法吗?我非常感谢你的帮助!

此致

托米

4 个答案:

答案 0 :(得分:14)

根据perlop

,自动递减运算符并不神奇

你可以这样做:

for my $file (reverse 'a' .. 'h') { 
    print $file;
}

答案 1 :(得分:3)

在perl中,(++)增量运算符是 magical ,而减量运算符is not ...

作为Eric修改的替代方案,你可以这样做:

for (my $file = 'h'; $file ge 'a';  $file=chr((ord$file)-1)) { 
    print $file;
}

用于计算字符数。

答案 2 :(得分:2)

'++'运算符以有趣的方式处理字符串是神奇的。 Camel,第3版,第91页,给出了这些例子:

print ++($foo = '99'); # prints '100'
print ++($foo = 'a0'); # prints 'b1'
print ++($foo = 'Az'); # prints 'Ba'
print ++($foo = 'zz'); # prints 'aaa'

' - '运算符没有这种魔力。

答案 3 :(得分:1)

是的,魔术行为仅适用于自动增量:

http://perldoc.perl.org/perlop.html#Auto-increment-and-Auto-decrement - > “自动增量算子对它有一些额外的内在魔力。”