开发者

How can I use a string to access a Perl array element?

开发者 https://www.devze.com 2022-12-16 20:07 出处:网络
I have this Perl code: @str = qw(a1 a2 a3); my @array; $s1 = \'a1\'; $s2 = \'a2\'; $s3 = \'a3\'; Now given s1, s2, s3 get references 开发者_如何学Cto $array[0], $array[1], $array[2] respectively. A

I have this Perl code:

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

Now given s1, s2, s3 get references 开发者_如何学Cto $array[0], $array[1], $array[2] respectively. A switch case is possible. but how to get it in one or two statements.


What you really want is a hash, not an array.

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

Now, if you still want to use an array for the index names and a different array for its values, well, it's up to you, but you are using the wrong tool for the job.

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


Your question is a little unclear, but I think you're asking how to find the index of an element in an array.

You can do that by using grep over a list of the array indexes:

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

You can achieve the same thing with a slightly nicer syntax using the List::MoreUtils module.

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

精彩评论

暂无评论...
验证码 换一张
取 消