Wal*_*ner 19 arrays syntax perl hash
此语法有效:
$b{"x"} = [1,2,3];
pp %b;
# Displays ("x", [1, 2, 3])
Run Code Online (Sandbox Code Playgroud)
但是我需要能够动态创建数组的内容并在以后分配它.这不起作用; 帮助,我错过的显而易见的部分是什么?
@a = [1,2,3];
$b{"x"} = @a;
pp %b;
# Shows up as ("x", 1) ... not what I want or expected.
Run Code Online (Sandbox Code Playgroud)
也试过这些变化.
$b{"x"} = [@a]; # ("x", [[1, 2, 3]]) ...close
$b{"x"} = \@a; # ("x", [[1, 2, 3]])
$b{"x"} = [\@a]; # ("x", [[[1, 2, 3]]])
$b{"x"} = %a; # ("x", 0)
$b{"x"} = $a; # ("x", undef)
$b{"x"} = [$a]; # ("x", [undef])
$b{"x"} = @{@a}; # ("x", 0)
Run Code Online (Sandbox Code Playgroud)
而且,理想情况下,我希望能够稍后将阵列作为阵列退出.
cjm*_*cjm 37
您缺少的部分是@a = [1,2,3]不会生成包含3个元素的数组.它创建一个带有一个元素的数组,它是一个arrayref.
你的意思@a = (1,2,3).
要将该数组分配给哈希元素,您可以使用$b{"x"} = [@a]或者$b{"x"} = \@a,具体取决于您尝试执行的操作. [@a]创建一个包含当前内容副本的新arrayref @a.如果之后的内容发生@a变化,则对其没有影响$b{x}.
另一方面,\@a给你一个@a自己的参考.如果您随后更改了内容@a,则会显示$b{x}(反之亦然).
Wes*_*ker 15
您需要阅读有关引用的perlref文档.
数组的存储方式有所不同:
# this is an array in an array variable
@a = (1, 2, 3);
Run Code Online (Sandbox Code Playgroud)
Verse存储对数组的引用:
# this is an array in a scalar variable stored as a reference to the previous array:
$b = \@a;
Run Code Online (Sandbox Code Playgroud)
功能上像指针一样工作.因此,您还可以将此引用存储在哈希中:
$x{'something'} = \@a;
Run Code Online (Sandbox Code Playgroud)
这一切都很好.你没有意识到的是[]创建了对数组的引用,你不能将它存储在数组变量中.您必须将其存储在标量中.因此这反而:
$c = [1, 2, 3];
$x{'else'} = $c;
Run Code Online (Sandbox Code Playgroud)
将工作.
在执行第二次分配之前访问和修改数组可以使用以下方法完成:
$c->[3] = '4';
Run Code Online (Sandbox Code Playgroud)
或者以数组形式使用它,首先取消引用它
push @$c, 5;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
39797 次 |
| 最近记录: |