Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Global symbol requires explicit package name

by ColonelPanic (Friar)
on Nov 28, 2012 at 15:12 UTC ( [id://1006044]=note: print w/replies, xml ) Need Help??


in reply to Global symbol requires explicit package name

To elaborate on what choroba said, the sub can see variables in the scope in which it is declared, not the scope in which it is called. In this case, printjob can only see variables that are either declared in the sub itself or in the outer scope of the file.

The "quick fix" would be to move those variable declarations outside the loops. However, as choroba said, the preferred solution is to pass everything that is needed into the sub.

In this case, it is not clear why %rtoa and @alljobs need to exist outside of runsingle. I would declare them there, then pass them in to printjob by reference:

sub runsingle { my %rtoa; my @alljobs; ... some code that actually populates the declared variables... printjob($fh,$h,\@foo,\%rtoa,\@alljobs); ... } sub printjob { my $fh=$_[0]; my $h=$_[1]; my $keys = $_[2]; my $rtoa = $_[3]; my $alljobs $_[4]; foreach my $key (@{$keys}) { ...

Also, the new style of filehandles is to use lexical variables directly. This eliminates the need for \*OUT:

open my $out_file, '>', 'filename.txt' or die "Ouch, $!";



When's the last time you used duct tape on a duct? --Larry Wall

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1006044]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others goofing around in the Monastery: (5)
As of 2024-04-16 03:58 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found