Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re: Variable scope headaches

by jdporter (Canon)
on Jul 26, 2012 at 16:29 UTC ( #983867=note: print w/replies, xml ) Need Help??

in reply to Variable scope headaches

Trying to use a variable as a variable name (i.e. "symbolic references") is generally considered a bad idea.

There is an item in the perlfaq about this: How can I use a variable as a variable name?. I highly suggest you read this.

It is considered critical enough that it is explicitly detected and forbidden by use strict; - the inclusion of which is universally considered good practice.

Instead, use a hash variable:

my %tag_value; foreach ( @tagvalue ) { if ( /([\w,_]+):([0-9]+)/ ) { $tag_value{$1} = $2; } else { die "Failed to assign value to $1\n"; } }

By the way I think your die statement is going to have a problem, in that $1 will not be set (at least not to what you think) if it ever gets executed. If the pattern match (regex) fails to match, then none of the positional variables ($1, etc.) get set. Instead, you might say something like:

die "Failed to match tag/value in '$_'\n";
I reckon we are the only monastery ever to have a dungeon stuffed with 16,000 zombies.

Replies are listed 'Best First'.
Re^2: Variable scope headaches
by nikmit (Acolyte) on Jul 27, 2012 at 07:49 UTC
    Thanks jdporter

    I actually had read that perlfaq item, obviously it didn't quite sink in :) Works now, and code looks better.

    Thanks for pointing out the 'die' statement error too. I have removed that block of code now but clearly its one to watch out for.


Log In?

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (13)
As of 2016-10-25 16:37 GMT
Find Nodes?
    Voting Booth?
    How many different varieties (color, size, etc) of socks do you have in your sock drawer?

    Results (323 votes). Check out past polls.