Почему эта программа не находит слово "ошибка" в моем текстовом файле?

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; }

Другие вопросы по тегам