in reply to Perl Variables

First of all, if I were you I'd check out perldata and perlref.

Second, you can probably do this relatively cleanly with eval:

my $tgs = shift; # scalar. my %hash = ( $tgs => 1 ); # sane-ish $hash{$tgs} = 1; # also sane-ish eval "my %Test_hash_$tgs = ()"; # why do this? die $@ if $@; # explode if it didn't work

Let me ask this: What are you trying to achieve?

-Paul

Replies are listed 'Best First'.
Re^2: Perl Variables
by Nalina (Monk) on May 14, 2007 at 15:01 UTC
    I have a script where I open a directory in which I have n number of directories and I need to load all files in these directories into a hash. So I am trying to name the hash with the name of the directory which is in a variable. something like this
    if ( !opendir( DIR, "$myDirectory")) { &Util::Status($StatusFile, "Couldn't open $myDirectory"); exit 1; } @Dirs = readdir( DIR ); closedir( DIR ); foreach $tgs (@Dirs) { $TGSet = "${myDirectory}/$tgs"; $DataDir = "${TGSet}/DW_DataToLoad"; next if $tgs =~ /^\.\.?$/; if ( -f "${DataDir}/ready_for_loading") { &Lock_File($StatusFile, $TGSet); unlink ( "${DataDir}/ready_for_loading"); $DW_file_GL = "${myDirectory}/DW_input_GL"; $DW_file_nonGL = "${myDirectory}/DW_input_nonGL"; &PrepareDWFile( $StatusFile, $DW_file_GL, GL); &prepareDWFile( $StatusFile, $DW_file_nonGL, nonGL); if ( ! opendir( DATA, "$DataDir")) { &Util::Status($StatusFile, "Couldn't open $DataDir"); exit 1; } @tgdir = readdir( DATA); foreach $task (@tgdir) { next if $task =~ /^\.\.?$/; ($task_name) = $task =~ m#(.*)\.txt$#i; if ( ! open (FILE, "$task")) { &Util::Status($StatusFile, "Error: Couldn't open $task_ +name file for reading"); exit 1; } @{$task_name} = <FILE>; } $TGS_Value_$tgs{VAR} = \@VAR; $TGS_Value_$tgs{STR} = \@STR; $TGS_Value_$tgs{PER} = \@PER; $TGS_Value_$tgs{MKT} = \@MKT; $TGS_Value_$tgs{INS} = \@INS; $TGS_Value_$tgs{GL} = \@GL; yet to complete it
    Please help

      In this case, I think a hash of hashes is definitely the way to go.

      $TGS_Value{$tgs}{VAR} = \@VAR; $TGS_Value{$tgs}{STR} = \@STR; $TGS_Value{$tgs}{PER} = \@PER; $TGS_Value{$tgs}{MKT} = \@MKT; $TGS_Value{$tgs}{INS} = \@INS; $TGS_Value{$tgs}{GL} = \@GL;
        How do I retrieve the values from the hash now?