【问题标题】:perl pointer array reference's dereference [duplicate]perl指针数组引用的取消引用[重复]
【发布时间】:2021-07-04 22:35:03
【问题描述】:

我想获取 a1 的值,但收到一条错误消息:不能使用未定义的值作为标量引用。

sub new{

  _name = [\\@ a1, \\@a2];

}

我的代码:

${self->_name}[0];   //get the pointer a1

${${self->_name}[0]}  // get the value a1

【问题讨论】:

  • 欢迎来到 SO!很难说出你的代码在这里。见how to format code
  • 很多这看起来像不正确/危险的 Perl 语法 - 你放了“use strict;”吗?将您的示例完成为 minimal reproducible example,这将提供您想要询问的确切错误。
  • 该代码不会产生您声称的错误,因为它甚至没有编译!

标签: perl reference dereference


【解决方案1】:

在 perl 中,您可以使用符号 (@$%&) 后跟大括号,仅在顶层使用“->”运算符取消引用指针。 例如:

use strict;
use warnings;
print "Outer Array:\n  " . _name() . "\n";

print "First inner Array:\n  " . _name()->[0]. "\n";
print "First Value of first inner Array:\n  " . _name()->[0]->[0]. "\n";
print "All Values of first inner Array:\n  " . join("/", @{_name()->[0]}) . "\n";
sub _name {
    my @a1 = (4 , 5 , 6);
    my @a2 = (1 , 2 , 3);
    return [\@a1, \@a2];
}

可能会打印出来:

Outer Array:
  ARRAY(0x55f141082ec0)
First inner Array:
  ARRAY(0x55f141082e18)
First Value of first inner Array:
  4
All Values of first inner Array:
  4/5/6

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-30
    • 1970-01-01
    • 2012-03-25
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多