Выход из цикла с использованием регулярного выражения в Perl

#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 в файле, который я пишу? Диск заполнен? Печатать или умереть?