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