2017-04-06 21 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

您的回答是正確的,並且被標記爲這樣,我只是添加了對我有意義的其他內容:) –