Beefy Boxes and Bandwidth Generously Provided by pair Networks
Your skill will accomplish
what the force of many cannot
 
PerlMonks  

Re: hash name as a variable?

by samtregar (Abbot)
on Sep 15, 2004 at 20:52 UTC ( [id://391291]=note: print w/replies, xml ) Need Help??


in reply to hash name as a variable?

Ronnie, you've stumbled onto one of the darker corners of Perl, the difference between lexical (my) variables and package/global (our, local) variables. The critical expression here is:

while (($key,$value) = each %$DB_name) {

This code attempts to use $DB_name as a symbolic-reference to find the hash to be indexed. Strict-mode forbids symbolic-references because they don't work with lexical (my) variables. When you turn off strict you get the package variable %IWSTEST (or whatever is in $DB_name) which doesn't exist since you declared your hashes with my().

Ok, so now you know what the problem is, how should you solve it? Here are two options:

  • Declare your variables with our() or use vars which will make them package variables accessible by symbolic references.
  • Access your variables with a real, non-symbolic reference based on the command-line argument. For example:
    my %name_to_hash = ( ISWTEST => \%ISWTEST, ISWLIVE => \%ISWLIVE, #...); while (($key,$value) = each %{$name_to_hash{$DB_name}}) { #...

Give it a try and post a new question if you're still having trouble.

-sam

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others romping around the Monastery: (2)
As of 2024-04-25 04:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found