How can I expand variables in text strings?

Let's assume that you have a string like:

    $text = 'this has a $foo in it and a $bar';
If those were both global variables, then this would suffice:

    $text =~ s/\$(\w+)/${$1}/g;  # no /e needed
But since they are probably lexicals, or at least, they could be, you'd have to do this:

    $text =~ s/(\$\w+)/$1/eeg;
    die if $@;			# needed /ee, not /e
It's probably better in the general case to treat those variables as entries in some special hash. For example:

    %user_defs = ( 
	foo  => 23,
	bar  => 19,
    );
    $text =~ s/\$(\w+)/$user_defs{$1}/g;
See also ``How do I expand function calls in a string?'' in this section of the FAQ.
Back to perlfaq4