То, что вы действительно хотите, это хеш, а не массив.
my %hash = (a1 => 'val 1', a2 => 'val 2', a3 => 'val 3');
my $s1 = 'a2'; # you want to read this from a file?
$hash{$s1} = 'new val 2';
Теперь, если вы все еще хотите использовать массив для имен индексов и другой массив для его значений, ну, это ваше дело, но вы используете неправильный инструмент для задания .
use strict;
my @str = qw(a1 a2 a3);
my @array;
sub search_ref {
my $s = shift;
my $i = 0;
foreach (@str) {
if ($_ eq $s) {
return \$array[$i];
}
$i++;
}
return undef;
}
my $ref = search_ref('a2');
$$ref = 'new val 2';