好的,所以我想知道如何从命令行调用perl子例程。因此,如果我的程序被称为测试,并且子程序被称为字段,我想从命令行调用它,如。
测试字段
答案 0 :(得分:6)
查看brian d foy's modulino pattern将Perl文件视为可由其他脚本使用的模块或作为独立程序。这是一个简单的例子:
# Some/Package.pm
package Some::Package;
sub foo { 19 }
sub bar { 42 }
sub sum { my $sum=0; $sum+=$_ for @_; $sum }
unless (caller) {
print shift->(@ARGV);
}
1;
输出:
$ perl Some/Package.pm bar
42
$ perl Some/Package.pm sum 1 3 5 7
16
答案 1 :(得分:3)
除非子例程是内置的Perl运算符,例如sqrt
,否则你不能这样做
perl -e "print sqrt(2)"
或者如果它是由已安装的模块提供的,请说List::Util
,就像这样
perl -MList::Util=shuffle -e "print shuffle 'A' .. 'Z'"
答案 2 :(得分:3)
使用调度表。
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
sub fields {
say 'this is fields';
}
sub another {
say 'this is another subroutine';
}
my %functions = (
fields => \&fields,
another => \&another,
);
my $function = shift;
if (exists $functions{$function}) {
$functions{$function}->();
} else {
die "There is no function called $function available\n";
}
一些例子:
$ ./dispatch_tab fields
this is fields
$ ./dispatch_tab another
this is another subroutine
$ ./dispatch_tab xxx
There is no function called xxx available
答案 3 :(得分:0)
这是一个例子:
[root@mat ~]# cat b.pm
#!/usr/bin/perl
#
#
sub blah {
print "Ahhh\n";
}
return 1
[root@mat ~]# perl -Mb -e "blah";
Ahhh
答案 4 :(得分:0)
不知道确切的要求,但这是一种解决方法,您无需对代码进行太多修改即可使用。
use Getopt::Long;
my %opts;
GetOptions (\%opts, 'abc', 'def', 'ghi');
&print_abc if($opts{abc});
&print_def if($opts{def});
&print_ghi if($opts{ghi});
sub print_abc(){print "inside print_abc\n"}
sub print_def(){print "inside print_def\n"}
sub print_ghi(){print "inside print_ghi\n"}
然后调用程序,如:
perl test.pl -abc -def
请注意,您可以省略不需要的选项。