Perl Rot47 with tr ///?

时间:2011-03-10 01:19:36

标签: string perl

我有以下代码:

#!/usr/bin/env perl

for ($str = <>; $str != '`'; $str = <>) {
    $str =~ tr/!-~/P-~!-O/;
    print $str;
}

但ROT47无法正常工作。即
当我使用不在[1-9]中的字符开始$ str时退出(是的,这意味着0不起作用)。

1 个答案:

答案 0 :(得分:8)

$str != '`'

是数字比较。 "0\n""`"(以及任何不以十进制数字或点开头的字符串)都是数字零,因此它们是相等的。

您打算使用字符串比较ne

(另外,始终use strict;use warnings;;后者会发现此错误。)

更典型的写法是

while (my $str = <>) {
    last if $str =~ /^`$/;
    $str =~ tr/!-~/P-~!-O/;
    print $str;
}