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

3

我有这段Perl代码:

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

现在给定 s1s2s3,需要分别将它们作为索引获取到 $array[0]$array[1]$array[2] 的引用。使用 switch case 语句是可行的,但如何在一两个语句中实现呢?

2
你能否说明你要实现什么? - Igor Korkhov
1
为什么?你已经有了值'a1','a2','a3',那么你为什么需要数组中的值?也许$s1、$s2和$s3对应于数组索引而不是值...考虑使用哈希表...? - Richard JP Le Guen
3
@iamrohitbanga,我认为现在是你休息一下不再发帖子,实际学习Perl的时候了。我知道你试图让我们逐步写出你需要的内容,当然,这符合SO的使命,但你的方法不会帮助你学到任何东西。 - Sinan Ünür
2
@iarohitbanga:我们知道你正在做大学项目并且有其他事情要做。然而,期望我们替你完成工作是不礼貌的。我们也在工作并且有其他事情可以做,但我们喜欢帮助别人。然而你却滥用了我们的好意。 - brian d foy
1
@iarohitbanga 进行Perl的大学项目的目的不是为了学习Perl吗? - Sinan Ünür
显示剩余5条评论
2个回答

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

2

您的问题有些不清楚,但我认为您是在问如何找到数组中元素的索引。

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

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接