如果有人能想出一种更有说服力的方式来标题我的标题,请随时提出建议......我觉得好像我正在尝试做什么,但它正在逃避我。
无论如何,我已经制作了一堆Perl脚本,每个脚本都有一个“usage()”方法,主要描述了如何使用相应的脚本。现在,我还得到了一个包,每个脚本(Flags.pm)使用它来解析脚本使用的命令行参数。我想要做的就是让它在Flags.pm(getArguments())中调用的方法将尝试确定是否设置了特定的标志(例如-help),然后从该方法内调用父脚本“用法()“ 方法。
这个想法是避免在每个脚本中放置代码调用“usage()”,因为每个脚本都会在相同的条件下调用它。我想在Flags.pm中使用我的getArguments()来处理它。基本上,我只是想实现这个......
Flags.pm
package Flags;
sub getArguments() {
usage();
}
1;
MyScript.pl
use Flags;
sub usage() {
print "Hello World";
}
$args=Flags->getArguments();
TL; DR:为脚本导入Perl包。想要从导入包中的方法中调用脚本中找到的方法。
答案 0 :(得分:3)
我可能会选择传递给getArguments
对打印使用信息的子的引用:
package Flags;
use strict; use warnings;
sub getArguments {
my $usage = shift;
return $usage->(__PACKAGE__);
}
package main;
use strict; use warnings;
sub usage {
my $pkg = shift;
return sprintf "%s: Usage information", $pkg;
}
print Flags::getArguments(\&usage), "\n";
输出:
C:\temp> uu Flags: Usage information
答案 1 :(得分:1)
根据我对你的三段文字的理解,你想要的是你的Flags.pm子程序调用主脚本的usage
子程序,无论该子程序是什么。为什么不这样做:
sub getArguments() {
main::usage();
}
main
是顶级软件包,即您的主要脚本。
答案 2 :(得分:0)
不是正确的方法。
package Flags;
our $USAGE;
sub set_usage {
$USAGE = $_[0];
}
sub usage {
print 'No usage'
unless defined $USAGE;
print $USAGE;
}
sub getArguments() {
usage();
}
1;
和.pl
use Flags;
Flags->set_usage('Usage here');
$args=Flags->getArguments();
如果你想使用sub
package Flags;
our $USAGE;
sub set_usage {
$USAGE = $_[0];
}
sub usage {
print 'No usage'
unless defined $USAGE;
&$USAGE;
}
sub getArguments() {
usage();
}
1;
和.pl
use Flags;
my $usage_sub = sub {
print 'Hello World!!!';
}
Flags->set_usage($usage_sub);
$args=Flags->getArguments();