Если вы хотите «переводить» входные и выходные строки построчно, вам нужно сделать это внутри цикла
while (my $userinput = <$fh>) {
chomp $userinput;
print $oh decodecaesar($userinput, 1);
}
Обратите внимание, что использование $line
является распространенным и хорошим соглашением для именования переменной, которая берет строку из файла. Я оставил $userinput
из OP на случай, если он должен передать, что файл содержит пользовательский ввод в каком-то конкретном смысле. Тем не менее, я рекомендую пересмотреть.
В этом случае вы также можете использовать пространство ввода и поиска по умолчанию , $_
while (<$fh>) {
chomp;
print $oh decodecaesar($_, 1);
}
Я не предлагаю это, просто отмечаю это. * * * * * * * * * * * * * * * * *
* * * * * * * * * * * * * * * * * * * *} .
Несколько замечаний по коду
Не нужно объявлять (my $userinput;
) и назначать отдельно ($userinput = ...
)
Нет необходимости заключать в кавычки переменную наподобие "$ARGV[0]"
(и это может привести к незначительным неприятностям)
Всегда проверять ввод, my $input = $ARGV[0] || usage();
(или предоставлять по умолчанию)
Обратите внимание на открытую прагму
use open ':std', ':encoding(UTF-8)';
и теперь все потоки будут кодироваться / декодироваться, поэтому вам не нужно делать это для каждого open
. Это может быть отменено при необходимости.