【发布时间】:2011-08-01 15:08:11
【问题描述】:
我最近看到一些让我感到困惑的 Perl 代码。我把所有额外的部分都拿出来看看它是如何工作的,但我仍然不明白它为什么会起作用。
基本上,我创建了这个虚拟“模块”(TTT.pm):
use strict;
use warnings;
package TTT;
sub new {
my $class = shift;
return bless {'Test' => 'Test'}, $class;
}
sub acquire {
my $tt = new TTT();
return $tt;
}
1;
然后我创建了这个脚本来使用模块(ttt.pl):
#!/usr/bin/perl
use strict;
use warnings;
use TTT;
our $VERSION = 1;
my $tt = acquire TTT;
print $tt->{Test};
让我感到困惑,我认为行不通的行是:
my $tt = acquire TTT;
我认为它不会起作用,因为“获取”子从未导出过。但它确实有效。 在调用获取后,我对“TTT”感到困惑,所以我删除了它,留下这样的行:
my $tt = acquire;
它抱怨一句空话,就像我想的那样。我添加了括号,如下所示:
my $tt = acquire();
它抱怨说没有main::acquire,就像我想的那样。
我习惯了对象可用的子例程,或导出的子例程,但我从未见过以包名结尾的子例程被调用。我什至不知道如何在 Google 上搜索。
所以我的问题是,在子例程调用之后添加包名如何工作?我以前从未见过这样的事情,这可能不是一个好的做法,但是有人可以解释一下 Perl 的作用吗?
谢谢!
【问题讨论】:
标签: perl perl-module