【问题标题】:perl reference and dereference on return statementperl 对 return 语句的引用和取消引用
【发布时间】:2021-04-08 13:48:26
【问题描述】:

我正在学习 perl,并且有一个与引用有关的问题。 我正在处理函数 get_id。

如果我返回$self->{_id},我将得到两个无法运行的数组地址(c)。

据我了解,$a 是引用,@{$a} 是数组,@{$a}[0] 会返回值 0?

这是我第一次在stackoverflow上发布问题,因此解释可能不够清楚,对此感到抱歉。

@a1 = [0]  
@a2 = [1]

my self{   
  _id = [\@a1,\@a2]; }   //given
  
sub get_id(){
   my $self      = shift;
   return  $self->{_id};
}

sub print{
    
...

   my $a = $obj -> get_id();

   my $b = @{$a}[0] * 100;    // c  (given)

..
} 

【问题讨论】:

  • 你代码的第一条语句其实是@a1 = [0] @a2 = [1] my self { ... }。如果您尝试运行它会产生一大堆错误,因为您的行不以分号结尾。 // 是 Perl 中的运算符,而不是注释。 my self { ... } 不是有效的声明。你永远不应该发布你实际上没有运行的代码,因为它只会浪费人们的时间。您发布的代码应该是可运行的,并且应该能证明您的问题。
  • 总是使用use strict; use warnings;

标签: perl reference


【解决方案1】:

$arr 是对数组的引用时,@$arr@{ $arr } 是它所引用的数组。数组的第一个(或第零个)元素是$arr->[0](或$$arr[0],但箭头符号更常见)。

以下

my @arr = [0];

创建一个包含单个元素的数组,该元素是一个数组引用。要获得 0,您需要这样做

$arr[0]->[0]

可以简写为

$arr[0][0]

要创建一个以 0 作为单个元素的数组,请使用

my @arr = (0);

顺便说一句,不要使用$a$b,它们是sort 中使用的特殊变量。使用my 对它们进行词汇化可能会导致难以调试的错误。

【讨论】:

    猜你喜欢
    • 2013-04-29
    • 2014-10-31
    • 2012-01-18
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-15
    • 2017-07-18
    相关资源
    最近更新 更多