在Perl中,如何确定我的文件是用作模块还是作为脚本运行?

sun*_*ica 10 perl module modulino

假设我有一个Perl文件,其中只有在我被称为脚本时才需要运行的部分.我记得有时读过在main()方法中包含这些部分并做一个

main() unless(<some condition which tests if I'm being used as a module>);
Run Code Online (Sandbox Code Playgroud)

但我忘了条件是什么.搜索Google并没有发现任何有益的结果.有人能指出正确的地方寻找这个吗?

Sin*_*nür 15

如果文件作为脚本调用,则没有调用者,因此您可以使用:

main() unless caller;
Run Code Online (Sandbox Code Playgroud)

请参阅brian d foy解释.

#!/usr/bin/perl

use strict;
use warnings;

main() unless caller;

sub main {
    my $obj = MyClass->new;
    $obj->hello;
}

package MyClass;

use strict;
use warnings;

sub new { bless {} => shift };

sub hello { print "Hello World\n" }

no warnings 'void';
"MyClass"
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Temp> perl MyClass.pm
Hello World
Run Code Online (Sandbox Code Playgroud)

使用另一个脚本:

C:\Temp\> cat mytest.pl
#!/usr/bin/perl

use strict;
use warnings;

use MyClass;

my $obj = MyClass->new;
$obj->hello;
Run Code Online (Sandbox Code Playgroud)

输出:

C:\Temp> mytest.pl
Hello World
Run Code Online (Sandbox Code Playgroud)


bri*_*foy 7

我把这些东西称为"modulinos",最初出现在我的Scripts as Modules文章中,用于Perl Journal(现为Dr. Dobbs).谷歌那个词,你得到了合适的资源.思南已经把我的一本书的开发资料与我谈到了.您可能也喜欢脚本如何成为模块.