CJ7*_*CJ7 0 arrays perl multidimensional-array dereference
@arr1 = ([1,2,3], 4, 5, 6);
$arr_ref = $arr1[0];
@arr2 = @$arr_ref;
Run Code Online (Sandbox Code Playgroud)
是否可以在一个陈述中做第2行和第3行?
我试过@arr2 = @$arr1[0];但它没有编译.
由于优先规则,您必须添加大括号
@arr2 = @{$arr1[0]};
Run Code Online (Sandbox Code Playgroud)
说到像
@{$AoA[$i]}
[...]
这样的事情,因为Perl的五个前缀解释器的优先级规则(看起来像是某人发誓:)$@*%&会使它们比后缀下标括号或大括号更紧密!
这意味着如果不需要显式索引,则不需要{},例如在已经检索数组元素的代码中.例如,根据Sobrique的评论,在内部使用arrayrefs展平数组
@all_elems = map { ref $_ eq "ARRAY" ? @$_ : $_ } @arr1;
Run Code Online (Sandbox Code Playgroud)
要检索只有arrayrefs的内容,可以使用: ()而不是: $_在块内的三元运算符中.()返回一个空列表,该列表在结果中变平,从而不影响它.(当条件评估为false时,必须返回一些东西.这个技巧可以map完成grep工作,有效地过滤.)