我在這里使用@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"
代碼在下面和GitHub 上。
- Perl 5.10 不喜歡什么?
- 是否有一個 Perl 功能需要 >5.10 隱藏在這里我丟失了?(我的 Perl 5.26.3 正在運行)
- 如果是這樣,可以使它更加向后兼容嗎?如何?
- 如果沒有,我在哪里可以找到版本以便我可以做正確的事情
use 5.xx?
- 我需要
use vars '$AUTOLOAD'嗎?
# Thanks @ikegami:
# https://stackoverflow.com/a/74229589/14055985
sub AUTOLOAD
{
my $method_name = our $AUTOLOAD =~ s/^.*:://sr;
my $method = sub {
my $self = shift;
return [ map { $_->$method_name(@_) } @$self ];
};
{
no strict 'refs';
*$method_name = $method;
}
goto &$method;
}
uj5u.com熱心網友回復:
您可以使用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 |
--------------------------------------
并且,欲了解更多詳情,
$ perlver --blame your-code.pl
------------------------------------------------------------
File : minver
Line : 3
Char : 40
Rule : _regex
Version : 5.013002
------------------------------------------------------------
s/^.*:://sr
------------------------------------------------------------
uj5u.com熱心網友回復:
s///r在 5.14 中添加。
my $method_name = our $AUTOLOAD =~ s/^.*:://sr;
可以替換為
( my $method_name = our $AUTOLOAD ) =~ s/^.*:://s;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/537915.html
標籤:perl自动加载
