我有这段Perl代码:
@str = qw(a1 a2 a3);
my @array;
$s1 = 'a1';
$s2 = 'a2';
$s3 = 'a3';
现在给定
s1
、s2
和 s3
,需要分别将它们作为索引获取到 $array[0]
、$array[1]
和 $array[2]
的引用。使用 switch case 语句是可行的,但如何在一两个语句中实现呢?我有这段Perl代码:
@str = qw(a1 a2 a3);
my @array;
$s1 = 'a1';
$s2 = 'a2';
$s3 = 'a3';
s1
、s2
和 s3
,需要分别将它们作为索引获取到 $array[0]
、$array[1]
和 $array[2]
的引用。使用 switch case 语句是可行的,但如何在一两个语句中实现呢?你真正需要的是哈希表,而不是数组。
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';
您的问题有些不清楚,但我认为您是在问如何找到数组中元素的索引。
您可以通过在数组索引列表上使用grep
来实现:
my ( $idx ) = grep { $str[$_] eq 'a1' } ( 0 .. $#str );
你可以使用List::MoreUtils模块,以稍微更好的语法实现相同的功能。
use List::MoreUtils 'firstidx';
my $idx = firstidx { $_ eq 'a1' } @str;