有时我需要一个有用的实用程序函数,比如List :: Util :: max,它在大型程序的中间执行很多操作.所以,如果我这样做
use List::Util 'max';
在我的程序的顶部,我坚持使用该符号,污染我的整个命名空间,即使我只需要在一个子程序中.
所以我一直在考虑尝试不同的模式,而是:
use List::Util (); # a whole bunch of stuff later... sub blah { List::Util->import( 'max' ); $blah = max @foobar; ... }
但是,这有两个问题.首先,它不会在块结束时自动取消导入(drat.)我将不得不通过unmport撤消所有内容.
另一个问题是显然原型没有得到正确应用,所以我不得不说max(@foobar)而不是更漂亮的无括号版本.
解决方法
您可以本地化符号表条目:
use List::Util (); @y = qw(1 3 5 -9 4); sub max { # return maximum *absolute value* of list my $max = abs(shift); $max<abs($_) && ($max=$abs($_)) for @_; return $max; } sub max2 { local *max = *List::Util::max; return max(@_); } print "My max: ",max(@y),"\n"; # ==> 9 print "List::Util::max ",max2(@y),"\n"; # ==> 5