вот два варианта, наверное есть еще, либо эти можно оптимизировать
my (@aa, @bb, @cc, @dd);
@aa = (\'3\',\'2\',\'1\',\'4\');
@bb = (\'a\',\'b\',\'d\',\'c\') ;
@cc = (\'xx\',\'xx\',\'xx\',\'xx\');
@dd = (\'xx\',\'xx\',\'xx\',\'xx\') ;
sub sortByFirstArray (\\@\\@; ){
my ($a1, $a2) = @_;
my (%a, @a);
for $i (0..$#$a1){
$a{$$a1[$i]} = $$a2[$i];
}
$i=0;
for $k ( sort (keys %a) ){
$a[$i]=$a{$k};
$i++;
}
return @a;
}
print sortByFirstArray(@aa, @bb);
print "\\n", sortByFirstArray(@bb, @aa);
sub sortByFirstArray2 (\\@\\@; ){
my ($a1, $a2) = @_;
my (%a, $b, @a, @r);
for $i(0..$#$a1){
$b = $$a1[$i];
$a{$b} = $i;
}
@a = sort(@$a1);
for $i (0..$#a){
$b = $a[$i];
$b = $a{$b};
$r[$i]=$$a2[$b];
}
return @r;
}
print "\\n", sortByFirstArray2(@aa, @bb);
print "\\n", sortByFirstArray2(@bb, @aa);