Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine

Re: variable with $$

by bart (Canon)
on Apr 08, 2004 at 10:56 UTC ( #343572=note: print w/replies, xml ) Need Help??

in reply to variable with $$

You're asking for symbolic references, huh? At least, I think you are. Well: don't do it, unless you know really well what you're doing — and basically, if you have to ask how to do it, I dare to bet that you don't. Making a name based on a user's input is always very dangerous. You never know whether he'll input the name of a variable you've used yourself in your program.

See dominus' classic 3 articles on his website, for more arguments against it:

  1. Why it's stupid to `use a variable as a variable name'
  2. A More Direct Explanation of the Problem
  3. What if I'm Really Careful?

In general: don't do it. Use a hash. Like this:

my %v; # my hash for user variables $v{Sam}++; # or: my $name = 'Sam'; $v{$name}++;

Oh, and if you really want to do it, try $$name or ${$name}, which both do the same thing, and only work on global (= package) variables — and only with no strict 'refs'. Just to show you it can be done... ;-)

If all you want is to work on predefined variables with no input from the user/outside world, try hard references instead.

my $var = \$sam; $$var++; # increments $sam
Yes, the syntax is exactly the same. That's one reason why coding without strict 'refs' in place, is a rather bad idea.

Log In?

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

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (3)
As of 2023-12-09 15:57 GMT
Find Nodes?
    Voting Booth?
    What's your preferred 'use VERSION' for new CPAN modules in 2023?

    Results (38 votes). Check out past polls.