jets80 has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I was wondering if it is possible to use a variable in a variable's name? Thanks, Chris

Replies are listed 'Best First'.
Re: Variable name containing a variable
by VSarkiss (Monsignor) on Nov 04, 2004 at 20:24 UTC
Re: Variable name containing a variable
by dragonchild (Archbishop) on Nov 04, 2004 at 20:21 UTC
    Yes, it is. This is called a symbolic reference.

    However, it is almost always better to use a hash, unless you are deliberately wanting to manipulate the symbol table. (If you don't understand what that means, you probably don't want to do it.)

    If you gave us more info about what you're trying to do, we can give a more in-depth answer.

    Being right, does not endow the right to be rude; politeness costs nothing.
    Being unknowing, is not the same as being stupid.
    Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.
    Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.

Re: Variable name containing a variable
by gaal (Parson) on Nov 04, 2004 at 20:27 UTC
    You mean something like this?

    no strict 'refs'; $red = "#ff0000"; $color = ${ "red" };
    Yes, it's possible :) and sometimes even useful, though in general you're better off reading (and understanding) perlref and using symbolic references, as the above are called, only when you really need them.

    By the way, instead of "red" in ${ "red" } you can put any expression, which will be evaluated in scalar context to produce the name of the variable to use. Note that you can only access vars that are in the symbol table, so that if I did my $red = ...;, I would not have access to it using this technique.

    Update: If this is your first go, maybe perlreftut would be an easier read. You cannot achieve deep understanding of Perl without reading the former, though.

Re: Variable name containing a variable
by diotalevi (Canon) on Nov 04, 2004 at 20:46 UTC

    Yes, but you really want to use a hash.

    my $something = 'a_key'; $message{ $something } = ' ... ';