我有以下代码:
#!/usr/bin/env perl
for ($str = <>; $str != '`'; $str = <>) {
$str =~ tr/!-~/P-~!-O/;
print $str;
}
但ROT47无法正常工作。即
当我使用不在[1-9]中的字符开始$ str时退出(是的,这意味着0不起作用)。
答案 0 :(得分:8)
$str != '`'
是数字比较。 "0\n"
和"`"
(以及任何不以十进制数字或点开头的字符串)都是数字零,因此它们是相等的。
您打算使用字符串比较ne
。
(另外,始终use strict;
和use warnings;
;后者会发现此错误。)
更典型的写法是
while (my $str = <>) {
last if $str =~ /^`$/;
$str =~ tr/!-~/P-~!-O/;
print $str;
}