Perl:我可以用变量来命名数组吗?



可以使用变量来命名数组吗?

例如:

my $input1="AAA";
my $input2="BBB";
my @{$input1};
my @{$input2};

因为$input1=AAA.

我想创建一个数组它的名字取决于$input1的值

最后它将创建数组@AAA@BBB

这可行吗?

需要一个"符号引用"这是一个大禁忌,有充分的理由(也可以在perlfaq7中看到,例如在本页中)。这是一个危险的古老的"特征"。它只在非常特殊的情况下使用。

使用散列

my %h = ( $input1 => $arrayref1, $input2 => $arrayref2 );

$arrayref要么是对命名数组@ary的引用,要么是对匿名数组[LIST]的引用。查看如何在perlreftut中创建它们,以及教程的其余部分如何使用它们。

所以现在当你需要一个数组的名字存储在一个变量中,它是$h{$input1},或$h{AAA}(如果这是$input1的值),返回数组引用,可以取消引用访问/添加元素。参见链接的perlreftut


请注意,arrayref的给定方式有很大的不同。如果它是对命名数组的引用,那么该数组的任何更改都会反映在我们从哈希中得到的结果中(反之亦然)

use warnings;
use strict;
use feature 'say';
my $in1 = 'A';
my @ary = 5..7;
my %h = ( $in1 => @ary );
say $h{$in1}->[0];   #--> 5
$ary[0] = 2;
say $h{$in1}->[0];   #--> 2
$h{$in1}->[-1] = 9;
say "@ary";          #--> 2 6 9 

如果我们使用一个匿名数组$in1 => [ LIST ],那么我们得到一个不能被修改的副本,除非直接写到$h{$in1}(除非LIST本身包含引用)。

如果LIST有引用,那么对于一个独立的副本,需要一个"深度拷贝"。

相关内容

最新更新