use strict; use warnings; use Data::Dumper; my @AoA = ([10001, 2.71, 4], [160001, 123.4, 5], [170001, 234.9, 9], [670002, 44.8, 11]); # data structure actually received as ref my $AoAref = \@AoA; my ($arg1, $arg2, $arg3); # AoA is OK print Dumper ($AoAref); for my $i (0 .. $#AoA){ my $aref = $AoA[$i]; print "array is: $AoA[$i]\n"; $arg1 = $AoA[$i] if ($AoA[$i][0] == "160001"); $arg2 = $AoA[$i] if ($AoA[$i][0] == "170001"); $arg3 = $AoA[$i] if ($AoA[$i][0] == "670002"); } # Checking that got what is expected, OK print "Ex.:argument1 $arg1\n"; print "argument deref @$arg1\n"; # Passing to &someothersub($arg1, $arg2, $arg3);