2009-10-22 16 views
10

मैं अपनी पर्ल स्क्रिप्ट में Getopt::Std का उपयोग करके कमांड लाइन से मूल्य एकत्र करने का प्रयास कर रहा हूं।मैं Getopt :: Std का उपयोग कर डिफ़ॉल्ट मान कैसे सेट कर सकता हूं?

use Getopt::Std; 
$Getopt::Std::STANDARD_HELP_VERSION = 1; 
getopts('i:o:p:'); 
my $inputfile = our $opt_i; 
my $outputfile = our $opt_o; 
my $parameter_value = our $opt_p; 

यहाँ पहले दो चर ($ inputfile, $ outputfile) अनिवार्य हैं, लेकिन पिछले चर ($ parameter_value) वैकल्पिक है और ध्यान नहीं दिया जा सकता है।

मैं डिफ़ॉल्ट चर ($ पैरामीटर_value) पर डिफ़ॉल्ट रूप से कुछ मान सेट करने का प्रयास कर रहा हूं, जब -p ध्वज कमांड लाइन पर अनदेखा किया जाता है।

my $parameter_value = our $opt_p || "20"; 

यहाँ अपने पास सही मान जब -p झंडा आदेश पंक्ति पर ध्यान नहीं दिया जाता है:

मैं इस का उपयोग कर की कोशिश की। लेकिन समस्या तब होती है जब मैं कमांड लाइन से कुछ मूल्य प्रदान कर रहा हूं (उदाहरण के लिए -पी 58), वही मान 20 58 के बजाय कार्यक्रम में पास किया गया है जिसे मैं कमांड लाइन से पास करता हूं।

क्या आप यहां दी गई गलतियों को इंगित करके मेरी मदद कर सकते हैं?

धन्यवाद।

उत्तर

16
#/usr/bin/perl 

use strict; 
use warnings; 

use Getopt::Std; 

getopts('i:o:p:'); 
our($opt_i, $opt_o, $opt_p); 

my $inputfile = $opt_i; 
my $outputfile = $opt_o; 
my $parameter_value = $opt_p || "20"; 

print "$_\n" for $inputfile, $outputfile, $parameter_value; 
 
C:\Temp> ks -iinput -ooutput -p55 
input 
output 
55 
 
C:\Temp> ks -iinput -ooutput 
input 
output 
20 
+0

अच्छा एक :) = +1 – DVK

+0

थेंक्स सिनन, यह बहुत अच्छा काम करता है और मेरे कोडिंग के प्रारूप को बरकरार रखता है। Thanx एक टन। – Suren

+5

यदि आप 5.10+ का उपयोग कर रहे हैं तो '||' के बजाय '//' का उपयोग करना बेहतर होगा क्योंकि सत्य के लिए बाद के परीक्षण, परिभाषित-नस्ल नहीं हैं। यह आपको झूठे मूल्यों (उदा। 0) में पारित होने में सक्षम होने से रोक देगा। 5.10 से पहले समकक्ष व्यवहार प्राप्त करने का लंबा हवादार तरीका 'x x = परिभाषित $ y है? $ y: Z' जहां 'Z' डिफ़ॉल्ट मान है। –

17

सबसे अच्छी बात यह है कि GetOpt::Long का उपयोग करें और व्यक्तिगत चर के बजाय हैश का उपयोग करें। तो फिर तुम सरणी

use Getopt::Long; 
    my %opts = (parameter => 20); 
    GetOptions(\%opts, 
      'p|parameter=i', 
      'o|outputfile=s', 
      'i|inputfile=s' 
    ) or die "Invalid parameters!"; 

    # I didn't bother cloning STANDARD_HELP_VERSION = 1; 
+0

धन्यवाद ब्रायन डी Foy यह काम करता है अब :) – Suren

+2

;);););););) – DVK

+0

सिनान - (1) तुम बस मजाक :-(नष्ट, (2) क्या मुझे एक ही दिन में मेरी पोस्ट को संपादित करने के लिए पूरे दो पर्ल चमकदारों के लिए बैज मिलता है? :) – DVK

1

पूर्वप्रविष्टि मैं getopts बुला से पहले डिफ़ॉल्ट चुनते चर स्थापित करने का सुझाव द्वारा मूलभूत मूल्यों पारित कर सकते हैं। इसके अतिरिक्त, आप डिफ़ॉल्ट मान दिखाने के लिए अपने उपयोग संदेश में $ opt_ चर का उपयोग कर सकते हैं।

use Getopt::Std; 
$Getopt::Std::STANDARD_HELP_VERSION = 1; 
our $opt_p = 20; 
sub HELP_MESSAGE { print " -p parameter value (default $opt_p)\n"; } 
getopts('i:o:p:'); 
my $inputfile = our $opt_i; 
my $outputfile = our $opt_o; 
my $parameter_value = our $opt_p; 
+0

या जब भी आपको इसकी आवश्यकता हो तो केवल '$ opt_i' का उपयोग करें। फिर यह स्पष्ट है कि यह एक पैरामीटर है। – Otheus

0
#/usr/bin/perl 
use strict; 
use warnings; 
use Getopt::Std; 

$Getopt::Std::STANDARD_HELP_VERSION = 1; 

my %opts =(); 
getopts('i:o:p:', \%opts); 
my $inputfile = $opts{i}; 
my $outputfile = $opts{o}; 
my $parameter_value = $opts{p} || "20"; 
print "$inputfile, $outputfile, $parameter_value\n"; 
संबंधित मुद्दे

 संबंधित मुद्दे