Perl:数组引用数组
Perl: Array of Array References
可能会在某处重复,但我查看了我能够找到的每个 perl 数组引用/取消引用示例,并尝试了 运行 这个字符串的 10 多种不同组合以获得我想要的输出。比如@$array[i], @{$array[i]}, @{@$array[i]}等
所以我有一个数组引用数组。我通过创建一个全局数组来构建它,然后将较小的临时数组推入该全局数组。当 Dumper() 为 运行.
时,最终结果看起来像这样
$VAR1 = [ 1 ]; $VAR2 = []; $VAR3 = []; $VAR4 = []; $VAR5 = []; $VAR6 = []; $VAR7 = [ 1 ]; $VAR8 = []; $VAR9 = []; $VAR10 = []; $VAR11 = [ 1 ]; $VAR12 = []; $VAR13 = [ 1 ]; $VAR14 = []; $VAR15 = [ 1 ];
现在我试图通过使用
取消引用这些数组之一
my @arrayRef = @{$redArray[$i]};
print "Here: " . @arrayRef[0];
@redArray 是我的全局数组。
我看到的@{$redArray[$i]} 部分是从全局数组中获取引用,然后将其引用 return 作为数组,如 [] 或 [1] 或 [1 ,1 .....]
然后在第二行我想获取数组的第一个元素,即 return nothing/error 或 1.
打印时 "Here: " 。 @arrayRef[0];虽然运行,但我看到的输出是
Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here:
感谢 glenn jackman 和 ThisSuitIsBlackNot 我才弄明白。
问题是我在上面做的参考或多或少是正确的,但我的代码后面有一个错误,我使用的参考是,
my $arrayRef = @redArray[$i];
my @redVal = @{$arrayRef};
正如其他人所提到的,您对何时应该使用 $ 和 @ 符号感到困惑。 (公平地说,它在 Perl 中并不总是很明显。)glenn 提供的 Perl 参考教程 link 是最好的资源。也许一些例子会有所帮助:
use strict;
use warnings;
my @important_years = (1066, 1492, 1776);
my @recent_years = (2010, 2012, 2014);
my $important_years_ref = \@important_years;
my $recent_years_ref = \@recent_years;
my @redArray = ($important_years_ref, $recent_years_ref);
printf("%s\n", $redArray[0][0]); # 1066
printf("%s\n", $redArray[0][1]); # 1492
printf("%s\n", $redArray[0][2]); # 1776
printf("%s\n", $redArray[1][0]); # 2010
printf("%s\n", $redArray[1][1]); # 2012
printf("%s\n", $redArray[1][2]); # 2014
# Get a reference to the "important years" array
my $important_years_copy_ref = $redArray[0];
printf("%s\n", $important_years_copy_ref->[2]); # 1776
# Or make brand new array by dereferencing
# the "important years" reference stored in @redArray
my @important_years_copy = @{$redArray[0]};
printf("%s\n", $important_years_copy[2]); # 1776
可能会在某处重复,但我查看了我能够找到的每个 perl 数组引用/取消引用示例,并尝试了 运行 这个字符串的 10 多种不同组合以获得我想要的输出。比如@$array[i], @{$array[i]}, @{@$array[i]}等
所以我有一个数组引用数组。我通过创建一个全局数组来构建它,然后将较小的临时数组推入该全局数组。当 Dumper() 为 运行.
时,最终结果看起来像这样$VAR1 = [ 1 ]; $VAR2 = []; $VAR3 = []; $VAR4 = []; $VAR5 = []; $VAR6 = []; $VAR7 = [ 1 ]; $VAR8 = []; $VAR9 = []; $VAR10 = []; $VAR11 = [ 1 ]; $VAR12 = []; $VAR13 = [ 1 ]; $VAR14 = []; $VAR15 = [ 1 ];
现在我试图通过使用
取消引用这些数组之一my @arrayRef = @{$redArray[$i]};
print "Here: " . @arrayRef[0];
@redArray 是我的全局数组。
我看到的@{$redArray[$i]} 部分是从全局数组中获取引用,然后将其引用 return 作为数组,如 [] 或 [1] 或 [1 ,1 .....]
然后在第二行我想获取数组的第一个元素,即 return nothing/error 或 1.
打印时 "Here: " 。 @arrayRef[0];虽然运行,但我看到的输出是
Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here: Here:
感谢 glenn jackman 和 ThisSuitIsBlackNot 我才弄明白。
问题是我在上面做的参考或多或少是正确的,但我的代码后面有一个错误,我使用的参考是,
my $arrayRef = @redArray[$i];
my @redVal = @{$arrayRef};
正如其他人所提到的,您对何时应该使用 $ 和 @ 符号感到困惑。 (公平地说,它在 Perl 中并不总是很明显。)glenn 提供的 Perl 参考教程 link 是最好的资源。也许一些例子会有所帮助:
use strict;
use warnings;
my @important_years = (1066, 1492, 1776);
my @recent_years = (2010, 2012, 2014);
my $important_years_ref = \@important_years;
my $recent_years_ref = \@recent_years;
my @redArray = ($important_years_ref, $recent_years_ref);
printf("%s\n", $redArray[0][0]); # 1066
printf("%s\n", $redArray[0][1]); # 1492
printf("%s\n", $redArray[0][2]); # 1776
printf("%s\n", $redArray[1][0]); # 2010
printf("%s\n", $redArray[1][1]); # 2012
printf("%s\n", $redArray[1][2]); # 2014
# Get a reference to the "important years" array
my $important_years_copy_ref = $redArray[0];
printf("%s\n", $important_years_copy_ref->[2]); # 1776
# Or make brand new array by dereferencing
# the "important years" reference stored in @redArray
my @important_years_copy = @{$redArray[0]};
printf("%s\n", $important_years_copy[2]); # 1776