从命令行调用perl子例程

时间:2014-04-13 04:12:31

标签: perl subroutine

好的,所以我想知道如何从命令行调用perl子例程。因此,如果我的程序被称为测试,并且子程序被称为字段,我想从命令行调用它,如。

测试字段

5 个答案:

答案 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

请注意,您可以省略不需要的选项。