2012-03-26 12 views
0

FansWWW :: Mechanize :: Firefox: Debugging-Versuch print() auf ungeöffnete Dateihandle

Sorry für diese newbie Frage zu stoppen, aber ich kann auf Google nicht finden, was ich wissen muss. Ich verstehe, Druck, aber verstehe das nicht ...

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

sehen viel, viel weiter unten noch mehr ....

gut - Was es das bedeutet?

Vielen Dank für die Geduld.

um mit dem Anfang zu beginnen: Nun, ich führe dieses Skript, das geschrieben wird, um einige Screenshots von Websites zu tun, habe ich auch mozrepl hier haben wir die Datei mit einigen der angeforderten URLs ... beachten Sie, dass dies ist nur ein kleiner Ausschnitt der realen Liste - die echte Liste ist viel länger. es enthält mehr als 3500 Zeilen und URLs

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/ 

was seltsam die Ausgabe ist - siehe unten ... Frage: sollte ich die

Skript tun ändern, warum tun i ge die Ausgabe mit dem folgenden kleinen Skript :

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

hier sehen die gut überwältigende Ausgabe - um ehrlich zu sein, ich habe nie thught solch ein komisches ou zu erhalten tput .. Ich habe den gesamten Code zu debuggen .... siehe unten,

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                    

auch ich versucht haben, eine Menge, die Fehler loszuwerden
einige Überlegungen: gut -Erstens, ich denke, das ist nicht sehr ernsthafter Fehler - ich denke, ich muss es debuggen und dann wird es besser funktionieren. Zweitens dachte ich zuerst, dass das Skript "die Maschine überladen" schien? Nun bin ich mir nicht sicher: Die Symptome sehen komisch aus, aber ich denke, dass es nicht notwendig ist, eine "Überlastung der Maschine" zu beenden Drittens, ich denke an bestimmte Schritte, um sicherzustellen, dass die Problem ist überhaupt mit WWW :: Mechanize :: Firefox überhaupt verwandt? Dies führt mich zu dem Punkt, was Perl Warnung bedeutet und die Idee, das Diagnose-Pragma zu verwenden, um mehr Erklärung zu erhalten: Was denkst du?

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. 

Nun - wir brauchen eine offene() zu tun, eine sysopen() oder eine so + cket() Aufruf oder einen Konstruktor aus dem Paket Filehandle rufen

gut - alternativ print () Bei geschlossenem Dateihandle liefert OUTPUT auch viele Antworten, die uns sagen, dass wir nicht Autodie verwendet haben und auch nicht den Rückgabewert von open überprüft haben. ich muss es debuggen und sicherstellen, um zu finden, wo der Fehler ins Spiel kommt

Sorry für diese Newbie Frage, aber ich kann nicht auf Google finden, was ich wissen muss. Ich verstehe, Druck, aber verstehe das nicht ...

Antwort

0

Es ist ein alter Beitrag aber vergeßt

Ich denke, Sie haben nicht die Erlaubnis, eine Datei im Verzeichnis zu schreiben. Wenn Sie also kein Dateihandle öffnen können, kann print() nicht in das Dateihandle schreiben.

wie unten etwas zu tun, könnte besser geeignet sein

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