#perl
#perl
Вопрос:
Я добавляю информацию в текстовый файл и хочу делать это до тех пор, пока exit не будет введен в виде строки.
Это то, что я использовал, но ‘exit’ не хочет выходить из цикла.
print "please input info to write to the filen";
my $input = <STDIN>;
until($input =~ /exit/)
{
open MYFILE, ">>information.txt" or die "$!";
print MYFILE "$input";
print "enter 'exit' to exitor add more infon";
my $input = <STDIN>;
}
Ответ №1:
Один из ваших $input скрывает другой. Удалите my из второго.
Ответ №2:
Здесь вы допускаете несколько ошибок, но, как сказал парапура, только одна вызывает эту конкретную ошибку.
print "Please input info to write to the filen";
my $input = <STDIN>;
#Three argument open is better than a global filehandle
open (my $handle, '>>', 'information.txt') or die "$!";
until($input =~ /^exit$/) { #Better with ^$, else 'fireexit' will end the loop as well.
print $handle $input;
print "Enter 'exit' to exit or add more infon";
#Remove the 'my', else it is another variable than the one in the until clause
$input = <STDIN>;
}
close ($handle) or die "$!";
Комментарии:
1. Почему вы каждый раз открываете файл заново в цикле? Кроме того, вы не закрыли файл, что означает, что вы теряете проверку ошибок. Ваши чрезмерно раздутые дескрипторы автозаполнения не сделают этого за вас! И вы не должны писать,
"$input"
когда вы имеете в виду$input
. И вы забыли проверить eof.2. Спасибо @tchrist! Я убрал open из цикла и после этого поместил close (возможно, можно было бы даже добавить if вокруг, который проверяет, не была ли первая строка exit, и пропускает все). Также изменен «$ input», но как мне проверить eof в файле, который я пишу? Диск заполнен? Печатать или умереть?