Perl使用现有值连接数组的名称

时间:2015-01-11 17:37:45

标签: perl

问题是这样的: 我有一个循环。当我迭代这个循环时,我想创建一些具有以下名称的数组:array1 array2 array3 ...

我想知道是否有办法在perl中连接这些名称 我试过这样的东西,但是我收到了错误

$i = 0;
while ($i <= 5) {
    @array . $i = ();
    $i++;
}

2 个答案:

答案 0 :(得分:4)

是的,你可以这样做,但不,你不应该这样做。

你应该做的是使用匿名数组的引用数组:

@arrayrefs = ();
$i = 0;
while ($i <= 5) {
    $arrayrefs[$i] = [];
    $i++;
}

或更简洁:

@arrayrefs = ([], [], [], [], [], []);

但为了完整起见'。 。 。你可以通过使用“符号引用”来实现这一点:

$i = 0;
while ($i <= 5) {
    my $name = "array$i";
    @$name = ();
    $i++;
}

(当然,数组默认为空数组,所以这不是真的需要......)。


顺便说一句,请注意,对于这种简单的情况,实际上习惯使用 for循环而不是while循环。要么:

for ($i = 0; $i <= 5; $i++) {
    ...
}

或者这个:

for $i (0 .. 5) {
    ...
}

答案 1 :(得分:1)

你想使用哈希,

use strict;
use warnings;

my %hash;
for my $i (1 .. 5) {

  $hash{ "array$i" } = [];
}

长话短说:Why it's stupid to use a variable as a variable name