http://qs321.pair.com?node_id=1098668


in reply to Passing Along Arrays

It's hard to test without having code I can run, but I changed a couple lines (marked w/ comments in the code and described more completely below) to get the functionality I think you want. Does the following work how you want it to?
sub extractData { my @projects; push( @projects, [readOnly("$proj Data.txt"), "A"] ); unless( $pointerProj eq "NONE" ) { push( @projects, [readOnly("$pointerProj Data.txt"), "B"] ); } for( @projects ) { my @data = @{ $_->[0] }; # WAS: my @data = @{ $_[0] }; my $key = $_->[1]; # WAS: my $key = $_[1]; ... } } sub readOnly { my @contents; my $filePath; my $file; my $errMsg; $filePath = "$path\\" . $_[0]; $errMsg = "Unable to read $filePath: $!"; open $file, '<', $filePath or die $errMsg; @contents = <$file>; close $file; return \@contents; # WAS: return \@contents; }

I changed readOnly() to return an array reference. Each project is then an array reference with another array reference (the 'data') at index 0 and a text string (the 'key') at index 1. To get these two items, you need to dereference the outer array reference with $_->[X]. You used $_[X] which is how you get an item from an array, not an array reference.