Perl:在使用“严格引用”时不能使用字符串(“XXX”)作为 HASH 引用

互联网 行业动态 更新时间:2024-06-13 00:19:06

Dad*_*ada 6

问题来自于线

'type' => $_[0]->{'name'},

$_[0]指封闭子例程的第一个参数(从 开始'<>' => sub {)。根据Getopt::Long 的<>option的文档,这个子例程在命令行的每个非选项参数中调用一次,这个“非选项参数”作为它的单个参数。如果您use Data::Dumper; print Dumper \@_;在此子例程的开头添加,您将获得以下输出:

$VAR1 = [
          'dbspace'
        ];

因此,$_[0]是字符串"dbspace",而不是哈希引用。做$_[0]->{'name'}是没有意义的。相反,您可能只想使用$_[0]

push @checks, {
  'type' => $_[0],
  ...

请参阅@shawn 的回答以了解为什么更新 Perl 会破坏您的脚本。

Sha*_*awn 6

@Dada 描述了这个问题,但是您看到相同的代码在旧版本上工作并且在新版本上失败,这是不寻常的 - 为什么它在旧设置上也没有失败?原因如下:

Getopt::Long2.37 版本中,在参数处理程序中传递给回调函数的参数从纯字符串更改为对象(在本例中为祝福的 hashref),其字段包括name. 然而,在 2.39...

<>在将参数传递给其他模块(例如Archive::Tar. <>恢复更改,因为对象的添加功能与回调函数并不真正相关。

因此,您的旧安装必须使用 2.37 或 2.38 版本,其中提供的访问名称字段的代码工作正常。2.39 或更高版本会破坏它(与 2.36 或更高版本一样)。

更多推荐

字符串,Perl,HASH,XXX

本文发布于:2023-04-20 20:27:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/hyzx/3519714f168a923f02974d3290b2bec0.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:字符串   Perl   HASH   XXX

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!