如何使用字符串访问Perl数组元素?

时间:2010-01-20 14:18:44

标签: perl

我有这个Perl代码:

@str = qw(a1 a2 a3);
my @array;
$s1 = 'a1';
$s2 = 'a2';
$s3 = 'a3';

现在s1s2s3分别引用$array[0]$array[1]$array[2]。开关盒是可能的。但如何在一两个陈述中得到它。

2 个答案:

答案 0 :(得分:9)

真正想要的是哈希,而不是数组。

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';

答案 1 :(得分:2)

您的问题有点不清楚,但我想您正在询问如何在数组中找到元素的索引。

您可以通过在数组索引列表上使用grep来实现此目的:

my ( $idx ) = grep { $str[$_] eq 'a1' } ( 0 .. $#str );

您可以使用List::MoreUtils模块以更好的语法实现相同的功能。

use List::MoreUtils 'firstidx';
my $idx = firstidx { $_ eq 'a1' } @str;