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

perl – 如何“使用”多个模块与一个“使用”?

发布时间:2020-12-15 21:31:02 所属栏目:大数据 来源:网络整理
导读:我想在我的所有程序中使用一些包和一些编译指示,如: use 5.014;use warnings;use autodie;use My::ModuleA::Something;use ModuleB qw(Func1 Func2); 我不想在每个模块中重复自己,所以寻找一个如何制作一个包,例如我的::常见的将包含上述包和在我的程序只做
我想在我的所有程序中使用一些包和一些编译指示,如:
use 5.014;
use warnings;
use autodie;
use My::ModuleA::Something;
use ModuleB qw(Func1 Func2);

我不想在每个模块中重复自己,所以寻找一个如何制作一个包,例如我的::常见的将包含上述包和在我的程序只做:

use My::Common;
say Func1("hello"); #say enabled and Func1 imported in the My::Common

怎么实现呢?

这是使用preldoc -f和perldoc perlmodlib,所以我想我必须“有点”这样做,BEGIN加上require& import,但绝对不知道如何.

更新:我已经尝试了基本的东西.

与require – 我的prg.pl程序.

require 'mymods.pl';
$var = "hello";
croak "$varn";

mymods.pl包含

use strict;
use feature 'say';
use Carp qw(carp croak cluck);
1;

不工作有错误:

$perl prg.pl 
String found where operator expected at prg.pl line 3,near "croak "$varn""
    (Do you need to predeclare croak?)
syntax error at prg.pl line 3,near "croak "$varn""
Execution of prg.pl aborted due to compilation errors.

与“使用我的”:

use My;
$var = "hello";
croak "$varn";

我的My.pm

package My;
use strict;
use feature 'say';
use Carp qw(carp croak cluck);
1;

也不工作.有同样的错误.

任何工作的想法?

解决方法

我会去这样做的:
package My::Common;
use 5.14.0;
use strict;
use warnings;
use autodie;
use Carp qw(carp croak cluck);

sub import {
    my $caller = caller;
    feature->import(':5.14');
    # feature->import('say');
    strict->import;
    warnings->import;
    ## autodie->import; # <-- Won't affect the caller side - see my edit.
    {
        no strict 'refs';
        for my $method (qw/carp croak cluck/) {
            *{"$caller::$method"} = __PACKAGE__->can($method);
        }
    }
}

1;

如果我错了,请更正我,否则有更好的方法.

编辑:

抱歉,我使用autodie->导入错误…

这应该工作,但它假定您始终从主包中调用My :: Common:

package My::Common;
# ...
sub import {
    # ...
    strict->import;
    warnings->import;
    {
        package main;
        autodie->import;
    }
    # ...
}

所以,当然,添加一个使用autodie更安全和更简单;到每个脚本:

use My::Common;
use autodie;
# ...

(编辑:李大同)

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

    推荐文章
      热点阅读