Arrays Perl将一个元素推入另一个数组中的数组中

Arrays Perl将一个元素推入另一个数组中的数组中,arrays,perl,Arrays,Perl,我有一个数组(我们称之为X),X包含数组。我想把一个元素(一个字符串)放入X内部的数组中。 我已经尝试搜索了很长一段时间,我发现所有的人都试图将数组推到其他数组中 我尝试了以下代码: push(@X[0],$element); 这给了我一个错误: 现在在perlscript.pl第30行禁止实验推送标量, 靠近“$element)” 我使用的是Perl5版本26。我认为这符合您的要求: push @{ $X[0] }, $element; 在Perl中,数组不能包含其他数组。要创建多维数据结

我有一个数组(我们称之为X),X包含数组。我想把一个元素(一个字符串)放入X内部的数组中。 我已经尝试搜索了很长一段时间,我发现所有的人都试图将数组推到其他数组中

我尝试了以下代码:

push(@X[0],$element);
这给了我一个错误:

现在在perlscript.pl第30行禁止实验推送标量, 靠近“$element)”


我使用的是Perl5版本26。

我认为这符合您的要求:

push @{ $X[0] }, $element;

在Perl中,数组不能包含其他数组。要创建多维数据结构,需要引用

考虑这个例子

use strict; use warnings;
use Data::Dumper;

my @inner = qw(a b c);
my @outer = (
    \@inner,         # reference to existing array
    [100, 200, 300], # new anonymous array reference
);

print Dumper \@outer;
这张照片

$VAR1 = [
          [
            'a',
            'b',
            'c'
          ],
          [
            100,
            200,
            300
          ]
        ];
你的外部数组就是,一个数组。但其中的元素是对数组的引用。您可以引用现有数组,也可以创建新的匿名数组

在转储结构以进行调试时,请注意,
Dumper
from也需要引用,因此我们对
\
使用相同的表示法

现在,要通过
@outer
内部的位置将元素添加到
@internal
,需要将第一个元素取出
@outer
。要做到这一点,sigil会发生变化,因此您将获得
$outer[0]
。要将其传递给
push
,我们需要将其转换为一个数组。这称为数组的解引用

push @{ $outer[0] }, 'd';
当我们再次
Dumper
它时,我们得到

$VAR1 = [
          [
            'a',
            'b',
            'c',
            'd'
          ],
          [
            100,
            200,
            300
          ]
        ];
因为第一个元素是对命名数组变量的引用,所以我们也可以直接对它进行操作

push @inner, 'e';
这将更改
@outer
中第一个元素的值,因为这两个元素都引用了内存中的相同内容(请参见为什么称为引用?)

$VAR1 = [
          [
            'a',
            'b',
            'c',
            'd',
            'e'
          ],
          [
            100,
            200,
            300
          ]
        ];
第二个元素不能这样做,因为它一开始是匿名引用

push @{ $X[0] }, $element;

让我们看看你的警告

现在在perlscript.pl第30行“$element”附近禁止实验性推送标量

在Perl 5.20.0
中,推送引用,因为它没有按预期工作,并开始发出警告。在Perl 5.30.0和it中,使程序死亡


另请参见和。

推送的语法为

push ARRAY, LIST
比如说,

push @a, $element;
无论何时出现变量名,都可以使用计算结果为引用的块替换该名称

push @{ $X[0] }, $element;

这就是你需要的。

就像大家已经提到的,
push@{$X[0]},$element

既然您说您使用的是v5.26,那么也可以使用后缀解引用:


push$X[0]->@*,$element

如果要将元素推送到数组,请尝试以下操作:
push(@X,$element)
@vinodk89:他想将
$element
推到位于
@X
索引0处的内部数组引用中