sub BackAndForth { my ($filename) = @_; # make multi-dimensional hash here ... it looks like # $ALLDATA{$filename}{$key1}{$key2}{$key3} = [@array] return (%ALLDATA); } my %ExternalHash = &BackAndForth('filename.csv'); %ExternalHash = &BackAndForth('filename2.csv'); #### %ALLDATA = ( 'key1' => HASH(0x9021f6c) 'key2' => HASH(0x90154a8) 'key3' => ARRAY(0x9015400) 0 value1 1 value2 #### %thisDataset = ( '' => HASH(0x876f324) 'key2' => HASH(0x9029220) empty hash) #### return(\%ALLDATA) %external = (yadda yadda) or $external = (blah ...