我有使用屬性::處理程序現在屬性::處理程序與使用行爲VS需要
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;
Perl模塊實現的,當我使用需要調用此模塊,並調用函數foo(),它只有執行foo的打印語句。
require "FOO.pm";
FOO->import();
FOO::foo();
輸出:
Executing Foo
但後來我做了使用用途相同,它的正確工作。
use FOO;
FOO::foo();
輸出:
Executing subroutine
Executing Foo
You Pass
其實,在我的代碼我使用需要調用它,它不工作。 我們將非常感謝您的幫助!
謝謝理查德,這是否意味着我不能做到「要求」? – rpg 2012-07-10 13:33:31
這意味着,是的。 'use'在BEGIN階段(「編譯時間」)運行,而'require'是一個運行時函數。 – 2012-07-10 13:35:38
「使用」正是:BEGIN {require Module;模塊 - >導入(LIST); }請參閱http://perldoc.perl.org/functions/use.html – jm666 2012-07-10 15:41:10