WWW :: Mechanize :: Firefox: попытка отладки остановить print () на неоткрытом дескрипторе файла - PullRequest
0 голосов
/ 26 марта 2012

болельщиков

Извините за этот вопрос новичка, но я не могу найти в Google то, что мне нужно знать.Я понимаю печать, но не понимаю этого ...

http://www.unifr.ch/sfm
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 2.
http://www.zug.phz.ch

см. Намного больше ниже ...

хорошо - Что это значит?

Большое спасибо за терпение.

для начала: хорошо, я запускаю этот скрипт, который написан для создания некоторых скриншотов веб-сайтов, которые я также запустил и запускаю mozrepl, здесь у нас есть файл с некоторыми иззапрошенные URL ... обратите внимание, что это только короткий фрагмент реального списка - реальный список намного длиннее.он содержит более 3500 строк и URL-адресов

http://www.unifr.ch/sfm
http://www.zug.phz.ch
http://www.schwyz.phz.ch
http://www.luzern.phz.ch
http://www.schwyz.phz.ch
http://www.phvs.ch
http://www.phtg.ch
http://www.phsg.ch
http://www.phsh.ch
http://www.phr.ch
http://www.hepfr.ch/
http://www.phbern.ch
http://www.ph-solothurn.ch
http://www.pfh-gr.ch
http://www.ma-shp.luzern.phz.ch
http://www.heilpaedagogik.phbern.ch/

странный вывод - см. ниже ... вопрос: должен ли я изменить скрипт

почему я получаю вывод с помощьюследующий небольшой сценарий:

! / usr / bin / perl

use strict;
use warnings;
use WWW::Mechanize::Firefox;

my $mech = new WWW::Mechanize::Firefox();

open(INPUT, "<urls.txt") or die $!;

while (<INPUT>) {
        chomp;
        print "$_\n";
        $mech->get($_);
        my $png = $mech->content_as_png();
        my $name = "$_";
        $name =~s/^www\.//;
        $name .= ".png";
        open(OUTPUT, ">$name");
        print OUTPUT $png;
        sleep (5);
}

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

http://www.unifr.ch/sfm
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 2.
http://www.zug.phz.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 3.
http://www.schwyz.phz.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 4.
http://www.luzern.phz.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 5.
http://www.schwyz.phz.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 6.
http://www.phvs.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 7.
http://www.phtg.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 8.
http://www.phsg.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 9.
http://www.phsh.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 10.
http://www.phr.ch
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 11.
http://www.hepfr.ch/
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 12.
http://www.phbern.ch                                                                            

ну, я много пробовал, чтобы избавиться от ошибок
некоторые размышления: ну, во-первых, я думаю, что это не очень серьезная ошибка- Я думаю, что я должен отладить его, и тогда он будет работать лучше.Во-вторых, я сначала подумал, что сценарий "перегружает машину"?Теперь я не очень уверен в этом: симптомы выглядят странно, но я думаю, что нет необходимости завершать «перегрузку машины». В-третьих, я думаю о некоторых шагах, которые необходимо предпринять, чтобы убедиться, что проблема решена.вообще связано с WWW :: Mechanize :: Firefox вообще?Это подводит меня к тому, что означает предупреждение Perl, и к идее использовать диагностическую прагму, чтобы получить больше объяснений: что вы думаете?

print() on unopened filehandle FH at -e line 1 (#2) (W unopened) An I/O operation was attempted on a filehandle that w +as never initialized. 

Хорошо - нам нужно сделать open (),вызов sysopen (), so + cket () или вызов конструктора из пакета FileHandle

хорошо - в качестве альтернативы print () для закрытого дескриптора файла OUTPUT также дает множество ответов, которые сообщают нам, что мыне использовал autodie, а также не проверял возвращаемое значение open.Я должен отладить его и убедиться, что он обнаружил, где возникает ошибка.

Извините за этот вопрос новичка, но я не могу найти в Google то, что мне нужно знать.Я понимаю печать, но не понимаю этого ...

1 Ответ

0 голосов
/ 14 июля 2012

Это старый пост, но не важно

Я полагаю, у вас нет разрешения на запись файла в каталог. Поэтому, если вы не можете открыть дескриптор файла, print() не может записать в дескриптор файла.

может быть уместнее сделать что-то вроде ниже

open(OUTPUT, ">$name") or die "Cannot open file...\n";
...