【问题标题】:Bizzare issue importing Perl variables from package从包中导入 Perl 变量的 Bizzare 问题
【发布时间】:2014-07-18 03:49:57
【问题描述】:

我正在尝试从 Perl 模块导入一个变量。我注意到当变量名的长度为一个字符时它起作用,而当它的长度大于一个字符时它不起作用。我现在什至无法做到。

我知道你可以用 Perl gotcha 的列表填满一个小体育场,但这很奇怪。为什么会这样?

示例 1)

mod.pm

use strict;
use warnings;

our $aa = 1;

1;

test.pl

#!/usr/bin/perl

use warnings;
use strict;

use mod;

print $aa . "\n";

运行它。失败了

$ ./test.pl
Variable "$aa" is not imported at ./test.pl line 8.
Global symbol "$aa" requires explicit package name at ./test.pl line 8.
Execution of ./test.pl aborted due to compilation errors.

示例 2)

mod.pm

use strict;
use warnings;

our $a = 1;

1;

test.pl

#!/usr/bin/perl

use warnings;
use strict;

use mod;

print $a . "\n";

运行它。它通过了

./test.pl
1

还有我的解释器的版本信息

$perl -v

This is perl 5, version 16, subversion 2 (v5.16.2) built for darwin-thread-multi-2level

【问题讨论】:

    标签: perl


    【解决方案1】:

    $a$bsort 的特殊变量。对于此类测试,它们不是变量名的好选择。

    至于如何让你的包导入工作,有几个步骤:

    1. 选择一个以大写字母开头的包名称,因为小写是为了根据perlstyle 为 perl pragma 保留:

      Perl 非正式地为“pragma”模块保留小写的模块名称,例如integerstrict。其他模块应该以大写字母开头并使用大小写混合,但由于原始文件系统将模块名称表示为必须适合几个稀疏字节的文件的限制,可能没有下划线

    2. 以与您的文件名相匹配的package 声明开始模块内容减去.pm

    这两件事将您的代码更改为如下所示:

    MyMod.pm

    package MyMod;
    
    use strict;
    use warnings;
    
    our $var = 1;
    
    1;
    

    test.pl

    #!/usr/bin/perl
    
    use warnings;
    use strict;
    
    use MyMod;
    
    print $MyMod::var. "\n";
    

    最后,如果您想真正将变量导入命名空间,您只需查看Exporter

    【讨论】:

    • 更改为 $z 并停止发生。不知道$a/$b
    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 2022-01-24
    • 2010-11-22
    • 1970-01-01
    相关资源
    最近更新 更多