【问题标题】:How to print the values of array reference in PERL?如何在 PERL 中打印数组引用的值?
【发布时间】:2023-04-05 23:58:01
【问题描述】:

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

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

输出是 数组(0x2032950)

数组(0x2032950)

我需要访问数组 elementS,但我无法更改 @days 声明。 以下代码也无法正常工作:-

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

【问题讨论】:

  • 也许您的意思是使用列表而不是使用数组引用来初始化@days 数组?就像现在一样,@days 有一个元素,它是对数组的引用。
  • 始终将use strict; use warnings; 添加到您的脚本中。
  • 是的,我做到了。我只是在部分代码中添加了一个类似的示例。

标签: perl


【解决方案1】:

Attn: 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
          ]
        ];

【讨论】:

  • 是的,它有效 :)您能否提供更多详细信息。尤其是“说”这个角色
  • @user11086556 -- my @days = ['a',2,3]; 创建一个数组,其中只有一个元素是对数组('a',2,3) 的引用。目前尚不清楚为什么数组以这种“非常规”的方式声明。
  • 知道了。很有帮助。谢谢。
  • @user11086556 -- 请参阅答案的扩展部分,它演示了数组的内容。
  • @user11086556 - sayprint $var . "\n" 类似,文档 say
【解决方案2】:

我认为您的数据中不小心多了一层。

当您使用方括号时,您实际上是在使用匿名数组构造函数。这将返回一个数组引用,它是一个标量(单个项目)。您可能并不打算将其分配给数组,因为您获得了一个包含一个元素的数组,其中一个元素是引用。这有效地产生了双层哈希:

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

由于数组引用是一个标量,您可能的意思是将其分配给带有$(单项)印记的标量。你不使用@,因为引用指向一个数组。印记更多的是关于容器而不是数据:

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

当您拥有数组引用时,有多种方法可以获取其元素。由于它是一个简单的标量(不是对数组或散列的单个元素访问),您可以在其前面加上 @(多元素标记)将其视为数组:

my @elements = @$days;

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

您甚至可以像命名数组一样对其进行插值:

say "Elements are @$days";

【讨论】:

    【解决方案3】:

    这是一种打印数组引用的方法:

    #! /usr/bin/env perl
    
    use warnings;
    use strict;
    use feature qw<say>;
    
    my $arr_ref = [1,2,3];
    
    say for $arr_ref->@*;
    

    【讨论】:

    • @G4113:- 是的,您的代码运行良好。但是一旦我更改了变量,它就会停止打印。使用特征 qw; foreach(@days){print "$_\n";} print "\n\n @days\n";打印“@$days\n”;说 $_ 为 $days->@*;我是不是错过了什么。感谢您的帮助。
    • 你必须给我更多关于这个问题的细节。
    • 我再次添加了问题描述中的代码。最后添加的代码的打印输出是 ARRAY(0x25b8950)。它仍然没有打印元素
    猜你喜欢
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 2012-06-22
    • 2019-01-02
    • 2018-02-25
    相关资源
    最近更新 更多