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');