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

perl – 如何在使用“require”时导入变量?

发布时间:2020-12-16 06:07:04 所属栏目:大数据 来源:网络整理
导读:这不起作用(下面的错误消息).我怎么能做这个工作? #!/usr/bin/env perluse warnings;use strict;use 5.10.1;sub routine { require FindBin; FindBin::-import( '$RealBin' ); say $RealBin;}routine(); 给出这个输出 Global symbol "$RealBin" requires ex
这不起作用(下面的错误消息).我怎么能做这个工作?

#!/usr/bin/env perl
use warnings;
use strict;
use 5.10.1;

sub routine {
    require FindBin;
    FindBin::->import( '$RealBin' );
    say $RealBin;
}

routine();

给出这个输出

Global symbol "$RealBin" requires explicit package name at ./perl.pl line 9.
Execution of ./perl.pl aborted due to compilation errors.

解决方法

require和import在运行时发生,而变量必须在编译时声明.所以我们有三个解决方案:

>在编译时导入FindBin:

use FindBin qw/$RealBin/;

sub routine {
    say $RealBin;
}

我强烈建议这个解决方案.
>声明变量,以便可以在没有严格或警告的情况下使用它:

sub routine {
    require FindBin;
    FindBin->import('$RealBin');
    our $RealBin;  # this just declares it so we can use it from here on
    say $RealBin;
}

>请勿导入符号并使用完全限定名称:

sub {
    require FindBin;
    # FindBin->import;  # does nothing here
    say $FindBin::RealBin;
}

从性能角度来看,在运行时加载FindBin可能是无用的,您应该正常使用它.如果您正在进行这些奇怪的运行时体操以在每次例程调用时重新计算$RealBin,这些解决方案都不会起作用,因为如果已经加载模块,则需要执行该模块(它会像$INC {‘那样) FindBin.pm’}或返回). FindBin :: again函数可能会有所帮助.

> FindBin docs
> require docs

(编辑:李大同)

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

    推荐文章
      热点阅读