我正在尝试在正则表达式中重载常量.这是我的Tagger包:
package Tagger;
use overload;
sub import { overload::constant 'qr' => \&convert }
sub convert {
my $re = shift;
$re =~ s/\\nom/((?:[A-Z]{1}[a-z]+\\s*){2,3}(\\((\\w|\\s)+\\)+?)*)/xg;
return $re;
}
1;
Run Code Online (Sandbox Code Playgroud)
这是我想要触发重载的子例程:
sub ChopPattern {
my $string= shift;
my $pattern = shift;
if($string =~ m/$pattern/) {
$string =~ s/$&/ /g;
return ($string, $&);
} else {
return ($string, '');
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试:
$test = "foo bar Max Fast bar foo";
($test, $name) = ChopPattern($test, '\nom');
say $test;
say $name;
Run Code Online (Sandbox Code Playgroud)
如果我硬连线测试模式\nom,则在子程序的匹配中: …
我在与要使用它的Perl程序相同的目录中创建了一个名为Base.pm的模块,但似乎没有加载模块.将模块的名称更改为除Base之外的任何内容,并且工作正常.Base.pm有什么特别之处,如何覆盖这种行为?感谢您的任何见解.
package Base;
use strict;
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = qw(func);
sub func { return "foo"; }
1;
Run Code Online (Sandbox Code Playgroud)
同
use Base;
print func();
Run Code Online (Sandbox Code Playgroud)
产量
Undefined subroutine &main::func called at test0.pl line 2.
Run Code Online (Sandbox Code Playgroud)
而
package Case;
use strict;
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);
$VERSION = 1.00;
@ISA = qw(Exporter);
@EXPORT = qw(func);
sub func { return "foo"; }
1;
Run Code Online (Sandbox Code Playgroud)
同
use Case;
print func();
Run Code Online (Sandbox Code Playgroud)
产量 …
perl ×2