strange output with a mechanize-script - closing filehandles - is this a cpu-limit

hello dear linux-fans -

well i run this script , which is written to do some screenshots of websites
i have also up and running mozrepl

whats strange is the output - see below…
question: should i do change the script

why do i ge the output?


#!/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 "$_
";
        $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                                                                                                                                                                            
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 13.                                                                                                                      
http://www.ph-solothurn.ch                                                                                                                                                                      
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 14.                                                                                                                      
http://www.pfh-gr.ch                                                                                                                                                                            
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 15.                                                                                                                      
http://www.ma-shp.luzern.phz.ch                                                                                                                                                                 
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 16.
http://www.heilpaedagogik.phbern.ch/
print() on closed filehandle OUTPUT at test_3.pl line 20, <INPUT> line 17.


what do you say - what should i do here.

well - hmm - what can i do here

i can use the diagnostics-pragma to get more insights into what is happening…

Alternatively, print() on closed filehandle OUTPUT also gives lots of answers that will tell us that we did not use autodie and also did not check the return value of open.

well what do you think?

how would you change the code - and make sure that the script will run successfully…

helllo again dear linux-freaks…

hmmm - well i just mused on the filehandle

well: the open call failed and since you assumed it was successful and proceeded to attempt to use the filehandle (which was not opened), you received that error.

The lesson here to learn is that we should ALWAYS check the return code of an open call to verify that it was successful and take proper action if it wasn’t.

well - i guess that i have to learn here some perl-issues… I guess that i have to correct the code accordingly.

we should also take care and should use the 3 arg form of open and a lexical var for the filehandle.

hmm what about this one here.



open my $out_fh, '>', $name or die "failed to create/open '$name' <$!>";


i take it and add it to the code . see like so; i do it like so:



#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize::Firefox;

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


open my $out_fh, '>', $name or die "failed to create/open '$name' <$!>";


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

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