2017-04-06 55 views
0

我对Perl绝对陌生,我试图找出Perl脚本解析脚本参数的问题。如何使用GetOptions检测尾随字符串?

我有以下的Perl脚本称为sample-perl.pl:

use strict; 
use warnings; 
use 5.010; 
use Getopt::Long qw(GetOptions); 

my $source_address; 
my $dest_address; 

GetOptions('from=s' => \$source_address, 
      'to=s' => \$dest_address) or die "Usage: $0 --from NAME --to NAME\n"; 
if ($source_address) { 
    say $source_address; 
} 

if ($dest_address) { 
    say $dest_address; 
} 

如果我使用像这样的命令(,我忘了进入第二个选项):

perl sample-perl.pl --from nyc lon 
Output will be: nyc 

我该如何执行,如果最后有一个附加字符串,它会被检测到,并显示一个错误?

解决方案:

增加,这将帮助我的情况下,至少:

if(@ARGV){ 
    //throw error 
} 
+0

检查'标@ ARGV'?如果'@ARGV> 0'有命令行 –

+1

@HåkonHægland上的'GetOptions()'没有拾取的(非选项)参数,就好像它。我希望我能接受这个答案:) – abhishek

+0

参见'perldoc Pod :: Usage' – toolic

回答

1

调用GetOptions后,请检查@ARGV阵列中的任何其余的命令行选项。这是假设所有的意外参数将产生一个错误:

use strict; 
use warnings; 
use 5.010; 
use Getopt::Long qw(GetOptions); 

my $source_address; 
my $dest_address; 

GetOptions('from=s' => \$source_address, 
      'to=s' => \$dest_address) or die "Usage: $0 --from NAME --to NAME\n"; 

@ARGV and die "Error: unexpected args: @ARGV"; 

if ($source_address) { 
    say $source_address; 
} 

if ($dest_address) { 
    say $dest_address; 
} 
+1

感谢您的支持。它修复了我的问题。 – abhishek

1

我正忙着回答,我看它现在回答,只是一些额外的信息。

use strict; 
use warnings; 
use 5.010; 
use Getopt::Long qw(GetOptions); 

my $source_address; 
my $dest_address; 

GetOptions('from=s' => \$source_address, 
     'to=s' => \$dest_address) or die "Usage: $0 --from NAME --to NAME\n"; 

@ARGV and die "To many arguments after --from or --to : @ARGV "; 

if ($source_address) { 
say $source_address; 
} else { 
say "Error: No Source specified"; #Check to see if --from is actually specified, else print error. 
} 

if ($dest_address) { 
say $dest_address; 
} else { 
say "Error: No destination specified"; #Check to see if --to is actually specified, else print error. 
} 

因此,在短期

+0

如果不使用“--from”,为什么要打印'Error'?这是一个选项。 '--to'相同。 – toolic

+0

,但具体说明的用法必须是“死”用法:$ 0 - 从NAME - 到NAME \ n“;这告诉我你需要这两个选项。例如计算距离和距离。 –

+0

您的回答是正确的,并且被标记为这样,我只是添加了对我有意义的其他内容:) –