2012-03-26 3 views
0

вентиляторовWWW :: Механизируйте :: Firefox: отладка-попытку остановить печать() на неоткрытом дескрипторе

К сожалению для этого новичка вопроса, но я не могу найти на 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/бен/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); 
} 

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

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. 

Ну - нам нужно сделать открытой(), а SysOpen(), или так + cket() вызов, или вызвать конструктор из пакета FileHandle

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

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

ответ

0

Его старый пост, но фига

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

делать что-то, как показано ниже может быть более подходящим

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