gpt4 book ai didi

perl - 为什么在使用范围运算符时 perl 只取消引用最后一个索引?

转载 作者:行者123 更新时间:2023-12-03 14:57:28 26 4
gpt4 key购买 nike

我有一个数组,@array , 数组引用。如果我使用范围运算符打印 @array 的元素 1 到 3 , print @array[1..3] , perl 打印元素 1 到 3 的数组引用。

为什么当我尝试取消引用索引在 1 和 3 之间的数组引用时,@{@array[1..3]} , perl 只取消引用并打印出在范围运算符中索引的最后一个元素?

有没有办法在取消引用数组时使用范围运算符?

示例代码

#!/bin/perl

use strict;
use warnings;

my @array = ();
foreach my $i (0..10) {
push @array, [rand(1000), int(rand(3))];
}

foreach my $i (@array) {
print "@$i\n";
}

print "\n\n================\n\n";

print @{@array[1..3]};

print "\n\n================\n\n";

最佳答案

来自 perldata :

Slices in scalar context return the last item of the slice.


@{ ... }将标量值解引用为数组,这意味着被解引用的值在标量上下文中。从上面的 perldata 引用我们知道这将返回最后一个元素。因此结果是最后一个元素。

更合理的方法是遍历切片并打印每个单独的数组引用:
use strict; 
use warnings;

use feature qw(say);

my @array_of_arrayrefs = (
[qw(1 2 3)],
[qw(4 5 6)],
[qw(7 8 9)],
[qw(a b c)],
);

foreach my $aref ( @array_of_arrayrefs[1..3] ) {
say join ',', @$aref;
}

关于perl - 为什么在使用范围运算符时 perl 只取消引用最后一个索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31569777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com