in reply to Re: Perl Variables
in thread Perl Variables

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

Replies are listed 'Best First'.
Re^3: Perl Variables
by kyle (Abbot) on May 14, 2007 at 16:02 UTC

    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?

        How do I retrieve the values from the hash now?

        Use the same expressions you used for assignment.

        $TGS_Value{$tgs}{VAR} = \@VAR;

        After that, $TGS_Value{$tgs}{VAR} is an array reference.

        my $var_ref = $TGS_Value{$tgs}{VAR}; my @VAR = @{$var_ref}; # ...is the same as: my @VAR = @{ $TGS_Value{$tgs}{VAR} };