Attribute::Handlerを使用してperlモジュールを実装しています
package FOO;
use strict;
use warnings;
use Attribute::Handlers;
use base 'Exporter';
our @EXPORT = qw(__RETRY);
sub __RETRY : ATTR(CODE) {
my ($pkg, $sym, $code) = @_;
no warnings 'redefine';
*{ $sym } = sub
{
my $self = $_[0];
my $result;
print ("Executing subroutine\n");
$result = $code->();
if ($result)
{
print "You Pass\n";
}
else
{
print "You Fail\n";
}
}
}
sub foo : __RETRY
{
print "Executing Foo\n";
return 1;
}
1;
ここで、requireを使用してこのモジュールを呼び出し、関数foo()を呼び出すと、fooのprintステートメントのみが実行されます。
require "FOO.pm";
FOO->import();
FOO::foo();
出力:
Executing Foo
しかし、それから私はuseを使用して同じことをします、それは正しい仕事をします。
use FOO;
FOO::foo();
出力:
Executing subroutine
Executing Foo
You Pass
実際、私のコードでは、requireを使用して呼び出していますが、機能していません。あなたの助けは大歓迎です!