在Perl中动态创建数组

Sen*_*mar 8 arrays perl

我想根据用户输入动态创建数组.例如,如果用户给出输入作为3然后三个阵列应当具有名称创建@message1,@message2@message3.

我怎么在Perl中做到这一点?

yst*_*sth 16

别.相反,使用数组数组:

my @message;
my $input = 3;
for my $index ( 0..$input-1 ) {
    $message[$index][0] = "element 0";
    $message[$index][1] = 42;
}
print "The second array has ", scalar( @{ $message[1] } ), " elements\n";
print "They are:\n";
for my $index ( 0..$#{ $message[1] } ) {
    print "\t", $message[1][$index], "\n";
}
Run Code Online (Sandbox Code Playgroud)

一些有用的规则在http://perlmonks.org/?node=References+quick+reference


Eth*_*her 12

我不得不问你为什么要这样做,因为这不是正确的方法.如果您有三个输入流,每个输入流都需要存储为列表,则存储一个列表,这是一个列表列表(列表存储为数组引用):

my @input = (
    [ 'data', 'from', 'first', 'user' ],
    [ qw(data from second user) ],
    [ qw(etc etc etc) ],
);
Run Code Online (Sandbox Code Playgroud)

如果您有与每个用户的数据关联的名称,您可能希望将其用作哈希键,以便对数据进行索引:

my %input = (
    senthil => [ 'data', 'from', 'first', 'user' ],
    ether => [ qw(data from second user) ],
    apu => [ qw(etc etc etc) ],
);
Run Code Online (Sandbox Code Playgroud)

有关为情况选择正确的数据结构以及如何定义它们的更多信息,请参阅Perl数据结构手册(perldoc perldsc).

  • 很好的答案 - 除了你指的是"数组"时你多次提到"列表".在Perl中,列表和数组不是一回事.列表是数据,数组是变量.差异很微妙,但很重要. (4认同)