【问题标题】:When does Perl ref($something) return "ARRAY(0x913310)"?Perl ref($something) 什么时候返回“ARRAY(0x913310)”?
【发布时间】:2018-04-30 03:16:14
【问题描述】:

我有一些复杂的 Perl 代码来测试$val = ref($something) 的值。不幸的是,我的代码失败了,因为有一种情况是 $val 是 "ARRAY(0x913310)" 而不是 "ARRAY"(根据 Perl 调试器)。

阅读ref() 的文档,没有将这样的值列为可能的返回值之一。此外,当尝试在调试器中以交互方式重现时,我只看到有效的返回值。

这可能是 Perl 基础中的错误吗? 我在 x86_64 上使用来自 SLES 11 SP 4 的 Perl 5.10.0...

【问题讨论】:

  • 您是否打过类似bless $obj,$val 的电话,而您的本意是bless $obj,ref($val)?
  • Perl 5.10.0 has been around for almost ten years 并且在 2009 年发布了一个次要版本 5.10.1。这样的事情不太可能是 Perl 本身的错误。你更可能犯了一个令人费解的错误。 ;)

标签: arrays perl ref


【解决方案1】:

当$something 是ARRAY(0x913310) 类的对象时。

$ perl -E'
   my $class = "".[];
   say $class;
   my $o = bless({}, $class);
   say ref($o);
'
ARRAY(0x115e360)
ARRAY(0x115e360)

【讨论】:

  • 我发现了问题:实际上一些子程序正在返回一个数组引用,并且在检查个别情况之前,ref() 函数没有应用于该返回值。 过失!,对不起!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-25
  • 1970-01-01
  • 2014-11-04
  • 1970-01-01
  • 1970-01-01
  • 2021-10-11
相关资源
最近更新 更多