Почему эта программа не находит слово «ошибка» в моем текстовом файле? - PullRequest
0 голосов
/ 03 августа 2010
open(LOG,"logfile.txt") or die "Unable to open $logfile:$!";
print "\n";
while(<$LOG>){
  print if /\berror\b/i;
}
close(LOG);

Ответы [ 4 ]

10 голосов
/ 03 августа 2010

Ваша опечатка фактически делает вас на один шаг ближе к открытию файла правильным способом, а именно, используя рекомендованную форму с тремя аргументами open .

use strict;
use warnings;

open(my $log, '<', "logfile.txt") or die "Open failed : $logfile : $!";
while (<$log>) {
    ...
}

Этот подходлучше, потому что ваш дескриптор файла может храниться в лексической переменной (а не в глобальном имени, таком как LOG).Это обеспечивает дополнительное преимущество в автоматическом закрытии файла, когда лексическая переменная выходит из области видимости.Кроме того, лексические дескрипторы файлов могут передаваться между подпрограммами с использованием более знакомого синтаксиса.

2 голосов
/ 03 августа 2010

Если вы хотели еще более легкий open, вы могли бы сделать это:

@ARGV = 'logfile.txt';
while ( <> ) { 
    print if /\berror\b/i;
}
1 голос
/ 03 августа 2010

У вас есть ошибка:

while (<$LOG>)

должно читаться

while (<LOG>)

Файловые дескрипторы не являются переменными, поэтому $.

1 голос
/ 03 августа 2010

open LOG, "logfile.txt"; while (<LOG>) { print if /\berror\b/i; }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...