Connecting Tech Pros Worldwide Forums | Help | Site Map

adding a variable name to a hash to name is part of the variable name

Bobby Chamness
Guest
 
Posts: n/a
#1: Apr 22 '07
I have a perl script that I wrote the loops through a list of servers in a
file and I want to create a hash with the server name in it. I want each
server to have its own hash.

for example
$myserver = thor;
hash name
$server_$myserver_name{$some_key}
want to get this hash name
$server_thor_name{$some_key}

How do I get the $myserver name to be interpolated to thor in that line?
I tried this and it failed.
$server_${myserver}_name{$some_key}


-Bobby



Jürgen Exner
Guest
 
Posts: n/a
#2: Apr 22 '07

re: adding a variable name to a hash to name is part of the variable name


Bobby Chamness wrote:
Quote:
I have a perl script that I wrote the loops through a list of servers
in a file and I want to create a hash with the server name in it.
You mean a the server name as part of the variable name? Well, maybe you
think that's what you want, but it is A Very Bad Idea (TM). See the FAQ "How
can I use a variable as a variable name?" and gazillions of previuos
discussions in CLPM for details.
Quote:
I
want each server to have its own hash.
Just use a hash of (references to) hashes.
Quote:
$server_$myserver_name{$some_key}
Why not
$servers{$myserver_name}{$some_key}

jue


Joe Smith
Guest
 
Posts: n/a
#3: Apr 22 '07

re: adding a variable name to a hash to name is part of the variable name


Bobby Chamness wrote:
Quote:
I have a perl script that I wrote the loops through a list of servers in a
file and I want to create a hash with the server name in it.
Sounds good. A master hash with server name as the top-level key.
Quote:
I want each server to have its own hash.
With a hash of hashes, each server has its own hash. The server's hash
just doesn't have a name; it is a member of the master hash.
Quote:
$server_$myserver_name{$some_key}
$servers{$myserver_name}{$some_key} = $value;


foreach my $server (sort keys %servers) {
print "Processing server $server\n";
foreach my $key (sort keys %{$servers{$server}}) {
print " $key = $servers{$server}{$key}\n";
}
}


-Joe

P.S. The newsgroup comp.lang.perl is defunct. Use comp.lang.perl.misc instead.
Closed Thread