v5.10 中的 Perl $AUTOLOAD 评估显示“在操作员期望的位置找到了 Bareword”...但 v5.26 工作正常

KJ7*_*LNW 1 perl autoload

在这里使用 @ikegami 帖子AUTOLOAD中的示例。我的RF::Component::Multi模块最近的CPAN 测试人员报告指出:

Bareword found where operator expected at .../RF/Component/Multi.pm line 102, near "s/^.*:://sr"
syntax error at .../RF/Component/Multi.pm line 102, near "s/^.*:://sr"
Run Code Online (Sandbox Code Playgroud)

代码如下,在 GitHub

  • Perl 5.10 不喜欢什么?
  • 是否有一个需要 >5.10 的 Perl 功能隐藏在这里,我错过了?(我的 Perl 5.26.3 正在工作)
    • 如果是的话,可以使其向后兼容吗?如何?
    • 如果没有,我在哪里可以找到该版本以便我可以做正确的事情use 5.xx
  • 我需要use vars '$AUTOLOAD'
Bareword found where operator expected at .../RF/Component/Multi.pm line 102, near "s/^.*:://sr"
syntax error at .../RF/Component/Multi.pm line 102, near "s/^.*:://sr"
Run Code Online (Sandbox Code Playgroud)

Dav*_*oss 7

您可以使用Perl::MinimumVersion来回答这样的问题。

$ perlver your-code.pl


   --------------------------------------
 | file   | explicit | syntax  | external |
 | -------------------------------------- |
 | minver | ~        | v5.13.2 | n/a      |
 | -------------------------------------- |
 | Minimum explicit version : ~           |
 | Minimum syntax version   : v5.13.2     |
 | Minimum version of perl  : v5.13.2     |
   --------------------------------------
Run Code Online (Sandbox Code Playgroud)

并且,欲了解更多详细信息,

 $ perlver --blame your-code.pl

 ------------------------------------------------------------
 File    : minver
 Line    : 3
 Char    : 40
 Rule    : _regex
 Version : 5.013002
 ------------------------------------------------------------
 s/^.*:://sr
 ------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)


ike*_*ami 5

s///r5.14 中添加。

my $method_name = our $AUTOLOAD =~ s/^.*:://sr;
Run Code Online (Sandbox Code Playgroud)

可以替换为

( my $method_name = our $AUTOLOAD ) =~ s/^.*:://s;
Run Code Online (Sandbox Code Playgroud)