Почему эта программа не находит слово "ошибка" в моем текстовом файле?
open(LOG,"logfile.txt") or die "Unable to open $logfile:$!";
print "\n";
while(<$LOG>){
print if /\berror\b/i;
}
close(LOG);
4 ответа
Ваша опечатка фактически делает вас на один шаг ближе к открытию файла правильным способом, а именно, используя рекомендованную форму с тремя аргументами open.
use strict;
use warnings;
open(my $log, '<', "logfile.txt") or die "Open failed : $logfile : $!";
while (<$log>) {
...
}
Этот подход лучше, потому что ваш дескриптор файла может храниться в переменной с лексической областью (а не в глобальном имени, таком как LOG
). Это обеспечивает дополнительное преимущество в автоматическом закрытии файла, когда лексическая переменная выходит из области видимости. Кроме того, лексические дескрипторы файлов могут передаваться между подпрограммами с использованием более знакомого синтаксиса.
Если вы хотели еще более легкий open
Вы могли бы сделать это:
@ARGV = 'logfile.txt';
while ( <> ) {
print if /\berror\b/i;
}
У вас есть ошибка:
while (<$LOG>)
должен прочесть
while (<LOG>)
Файловые дескрипторы не являются переменными, поэтому нет $.
open LOG, "logfile.txt";
while (<LOG>) {
print if /\berror\b/i;
}