2013-08-19 43 views
1

我使用Getopt :: Long來獲取我的perl腳本的命令行選項。我想向它傳遞一個可選參數,以便我可以在指定值時執行某些操作,如果調用該選項,則可以執行其他操作,但不會傳遞任何值。如何正確使用Getopt :: Long來分析可選參數?

該腳本會被調用是這樣的:

/root/perlscripts/pingm.pl --installdaemon 

爲不指定參數,並且:

--installdaemon=7.7.7.7 

指定一個可選的參數。

然後我會做到這一點:

Getopt::Long::Configure(qw(bundling no_getopt_compat)); 
GetOptions ('installdaemon:s' => \$daeminstall) or die ("Error in command line arguments\n"); 

下一步就是我懷疑。

如果我做的:

if ($daeminstall) { 
     print "I was called!\n"; 
     $installdaemon=1; 
    } 

然後,如果塊將永遠不會被調用如果腳本是用/root/perlscripts/pingm.pl --installdaemon叫,因爲根據的perldoc,一個可選的參數將採取''的字符串,如果沒有值指定。

那麼如何檢查是否指定了該選項而未傳遞值?

回答

3

改爲檢查defined $daemsintall。如果已定義,則指定相應的選項;現在您可以將其與空字符串進行比較,以查看它是否設置爲某個值。

示例(它使用GetOptionsFromString方法,但是這種方法是相同的):

use Getopt::Long(qw/GetOptionsFromString/); 
my $tag; 
GetOptionsFromString('--tag', 'tag:s' => \$tag); 
if (defined $tag) { 
    if ($tag eq '') { 
     $tag = '7.7.7.7'; 
    } 
    print $tag; 
} 
else { 
    print 'No option supplied'; 
} 

而這裏的IDEOne demo

+0

這一工程!謝謝! – Droidzone

+2

沿着同樣的路線,如果將選項存儲在散列中,則可以檢查選項的「存在」。 – fenway

2

使用defined內置功能:

use warnings; 
use strict; 
use Getopt::Long; 

my $daeminstall; 
GetOptions(
    'installdaemon:s' => \$daeminstall, 
) or die; 

if (length $daeminstall) { 
    print "installdaemon was used, and has a value: $daeminstall\n"; 
} 
elsif (defined $daeminstall) { 
    print "installdaemon was used, but has no value\n"; 
} 
else { 
    print "installdaemon was not used\n"; 
} 
相關問題