是否有可能重新定义_function_used_by_exported_function
只为exported_function
呼叫second_routine
?
#!/usr/bin/env perl
use warnings;
use strict;
use Needed::Module qw(exported_function);
sub first_routine {
return exported_function( 2 );
}
no warnings 'redefine';
sub Needed::Module::_function_used_by_exported_function {
return 'B';
}
sub second_routine {
return exported_function( 5 );
}
say first_routine();
say second_routine();
您可以在本地重新定义sub _function_used_by_exported_function
您的内部sub second_routine
。
package Foo;
use warnings;
use strict;
use base qw(Exporter);
our @EXPORT = qw(exported_function);
sub exported_function {
print 10 ** $_[0] + _function_used_by_exported_function();
}
sub _function_used_by_exported_function {
return 5;
}
package main;
use warnings;
use strict;
Foo->import; # "use"
sub first_routine {
return exported_function( 2 );
}
sub second_routine {
no warnings 'redefine';
local *Foo::_function_used_by_exported_function = sub { return 2 };
return exported_function( 5 );
}
say first_routine();
say second_routine();
say first_routine();
我把里面的类型团赋值sub second_routine
布赖恩d FOY的掌握Perl中 ,第10章第161页上的子被分配给类型团,这只是取代了它的CODEREF部分重新定义。 我用local
只做当前块内。 这样一来,外面的世界是不会受到改变,因为你可以在输出中看到。
1051
1000021
1051
文章来源: Is it possible to redefine subroutines to be localized for a part of the code?