加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 在大脚本中用词汇方式导入有用的函数

发布时间:2020-12-15 22:04:55 所属栏目:大数据 来源:网络整理
导读:有时我需要一个有用的实用程序函数,比如List :: Util :: max,它在大型程序的中间执行很多操作.所以,如果我这样做 use List::Util 'max'; 在我的程序的顶部,我坚持使用该符号,污染我的整个命名空间,即使我只需要在一个子程序中. 所以我一直在考虑尝试不同的模
有时我需要一个有用的实用程序函数,比如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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读