我有一个数组,@allinfogoals我想让它成为一个多维数组.为了实现这一点,我试图将数组作为项目推送如下:
push @allinfogoals, ($tempcomponents[0], $tempcomponents[1], $singlehometeam);
Run Code Online (Sandbox Code Playgroud)
数组括号中的那些项目都是我预先拥有的单个字符串.但是,如果我参考$allinfogoals[0],我得到的价值,$tempcomponents[0]如果我尝试$allinfogoals[0][0]我得到:
Can't use string ("val of $tempcomponents[0]") as an ARRAY ref while "strict refs" in use
Run Code Online (Sandbox Code Playgroud)
如何添加这些数组@allinfogoals以使其成为多维数组?
ike*_*ami 16
首先,parens in
push @allinfogoals, ($tempcomponents[0], $tempcomponents[1], $singlehometeam);
Run Code Online (Sandbox Code Playgroud)
什么也不做.这只是一种奇怪的写作方式
push(@allinfogoals, $tempcomponents[0], $tempcomponents[1], $singlehometeam);
Run Code Online (Sandbox Code Playgroud)
Parens改变优先权; 他们不创建列表或数组.
现在回答你的问题.在Perl中没有二维数组这样的东西,数组只能容纳标量.解决方案是创建一个对其他数组的引用数组.这就是为什么
$allinfogoals[0][0]
Run Code Online (Sandbox Code Playgroud)
是的缩写
$allinfogoals[0]->[0]
aka
${ $allinfogoals[0] }[0]
Run Code Online (Sandbox Code Playgroud)
因此,您需要将值存储在数组中,并将该数组的引用放在顶级数组中.
my @tmp = ( @tempcomponents[0,1], $singlehometeam );
push @allinfogoals, \@tmp;
Run Code Online (Sandbox Code Playgroud)
但Perl提供的操作员可以为您简化.
push @allinfogoals, [ @tempcomponents[0,1], $singlehometeam ];
Run Code Online (Sandbox Code Playgroud)