Perl Rot47 с tr ///? - PullRequest
       1

Perl Rot47 с tr ///?

1 голос
/ 10 марта 2011

У меня есть следующий код:

#!/usr/bin/env perl

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

, но ROT47 не работает должным образом.то есть
Это завершается, когда я начинаю $ str с символа, которого нет в [1-9] (Да, это означает, что 0 не работает).

1 Ответ

8 голосов
/ 10 марта 2011
$str != '`'

- числовое сравнение.И "0\n", и "`" (а также любая строка, не начинающаяся с десятичной цифры или точки) имеют числовой ноль, поэтому они равны.

Вы предполагали использовать сравнение строк ne.

(Кроме того, всегда use strict; и use warnings;; последний мог бы поймать эту ошибку.)

Более типичный способ написать это было бы

while (my $str = <>) {
    last if $str =~ /^`$/;
    $str =~ tr/!-~/P-~!-O/;
    print $str;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...