如何在PERL中打印数组引用的值?

wnavrhmk  于 2023-05-07  发布在  Perl
关注(0)|答案(4)|浏览(247)

在Perl中我有一个带方括号的定义的天数组。我想访问数组的每个元素。下面的代码中有一个类似的例子(这只是一个代码片段):

@days = [a,2,3];
foreach(@days){print "$_\n";}
print "\n\n @days";

输出为ARRAY(0x 2032950)
阵列(0x 2032950)
我需要访问数组元素,但无法更改@days声明。下面的代码也不好用:

@days = [a,2,3];
    use feature qw<say>;    
    foreach(@days){print "$_\n";}
    print "\n\n @days\n";
    print "@$days\n";
    say $_ for $days->@*;

tzdcorbm

tzdcorbm1#

注意:OP -数组声明不正确。
如果你不能改变数组声明(不清楚是什么原因),那么用下面的代码打印它们

use strict;
use warnings;
use feature 'say';

my @days = ['a',2,3];

say for @{$days[0]};

say "Number of elements: " . scalar @{$days[0]};

正确的代码应该是

use strict;
use warnings;
use feature 'say';

my @days = ('a',2,3);

say for @days;

say "Number of elements: " . scalar @days;

下面这段代码演示了数组是如何创建的,利用这些信息很容易就能弄清楚如何访问数组元素的存储值

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my @days = ['a',2,3];

say Dumper(\@days);

输出

$VAR1 = [
          [
            'a',
            2,
            3
          ]
        ];
mctunoxg

mctunoxg2#

我觉得你的数据里多了一层。
使用方括号时,实际上是在使用匿名数组构造函数。返回一个数组引用,它是一个标量(单个项)。你可能并不想把它赋值给一个数组,因为你得到了一个只有一个元素的数组,而这个元素就是引用。这实际上是一个双层哈希:

my @days = [ 'a', 1, 2 ];  # probably wrong

由于数组引用是一个标量,所以您可能想将它赋给一个带有$(单项)符号的标量。你不用@,因为引用指向一个数组。sigil更多的是关于容器而不是数据:

my $days = [ 'a', 1, 2 ];

当你有数组引用时,有多种方法可以获取它的元素。由于它是一个简单的标量(不是对数组或散列的单个元素访问),您可以使用@(多元素符号)作为前缀将其视为数组:

my @elements = @$days;

# OR
foreach my $element ( @$days ) {
    say "Element: $element";
    }

你甚至可以像命名数组一样插值:

say "Elements are @$days";
fruv7luv

fruv7luv3#

下面是一个打印数组引用的方法:

#! /usr/bin/env perl

use warnings;
use strict;
use feature qw<say>;

my $arr_ref = [1,2,3];

say for $arr_ref->@*;
bq3bfh9z

bq3bfh9z4#

谢谢这帮助了我,下面放一些简单的东西,这帮助了我。

@days = [a,2,3];
@Arr = @{$days[0]};
print "@Arr";
# foreach (@Arr){
#   print $_;
# }

相关问题