Может кто-нибудь объяснить этот фрагмент кода Perl? - PullRequest
1 голос
/ 17 марта 2011

Этот маленький кусочек кода был одним из основных в моих сценариях, но я взял синтаксис из другого рабочего сценария, который кто-то другой написал, и адаптировал его под свои нужды.Я даже не уверен, что используемый здесь синтаксис является лучшим или наиболее распространенным способом открытия обработчика файлов.

Код:

$fh = \*STAT_FILE;
open ($fh,">>".$stat_file) or die "Can't open $stat_file: $!\n";
my $print_flag = ( -z $stat_file );

Я не до конца понимаюпервая строка, а также последняя строка кода выше.В частности, \*STAT_FILE и -z соответственно.

Я знаю, что по большей части вторая строка откроет файл для добавления или выхода и выдаст ошибку.Но, опять же, я не понимаю, для каких целей $! также служит в этой строке.

Может ли кто-нибудь построчно объяснить мне этот код Perl в псевдо?Кроме того, если описанный выше метод не является предпочтительным, то что это такое?

Заранее спасибо

Ответы [ 2 ]

11 голосов
/ 17 марта 2011

До Perl 5.6 файловые дескрипторы могли быть только глобами (голыми словами) или ссылками на глобусы (что и есть \ * STAT_FILE).Кроме того, лучше использовать открытый с тремя аргументами ( См. Документы . Также см. perlopentut ).Теперь вы можете сделать:

open(my $fh, ">>", $stat_file) or die "Failed to open $stat_file: $!";

и забыть о \ * STAT_FILE.

-z равно одной из функций проверки файлов (и принимает имя файла илидескриптор файла в качестве аргумента) и проверяет, имеет ли файл нулевой размер.

$!является одной из Special Variables и содержит самое последнее системное сообщение об ошибке (в этом случае, почему вы не можете открыть файл, возможно, проблемы с разрешениями, или каталог в пути к файлу не существует, и т. д..).

Вы должны научиться использовать perldoc, все это в perldoc:

perldoc perlfunc (в частности, perldoc -f open и perldoc -f -X)

perldoc perlvar

3 голосов
/ 17 марта 2011

Первая строка присваивает переменной ссылку (знак обратной косой черты) на typeglob (запись в таблице полных символов) STAT_FILE. Это была довольно идиоматическая конструкция perl для передачи файловых дескрипторов, как сообщается, просто чтобы назвать ее в Larry Wall "Programming perl" $! переменная содержит сообщение об ошибке, возвращаемое операционной системой.

Таким образом, весь смысл:

  • строка 1. поместите в переменную $ fh дескриптор файла;
  • строка 2. Открыть для добавления файла, сообщающего об ошибке системного сообщения в случае сбоя;
  • строка 3. Установите флажок переменной предупреждения, если файл имеет нулевую длину
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...