in reply to how to assign map results to arrays

You wouldn't have this problem if you were using $var[n] instead of $varn.

my @arrays = map { [ split /;/, $_ ] } @nums;

But to answer your question:

my $num1 = "1;2;3"; my $num2 = "4;5;6"; my (@ar1, @ar2); for ( [ $num1, \@ar1 ], [ $num2, \@ar2 ], } { my ($num, $ar) = @$_; @$ar = split /;/, $num; }

By the way, don't fool yourself into thinking the first argument of split is a text string. split expects a regexp.