2008-09-22 9 views
7

मेरे पास संभावित कमांड लाइन तर्क (एक रीड-इवल-प्रिंट-लूप प्रोग्राम का उपयोग करके) के साथ एक स्ट्रिंग है और मैं इसे Getopt :: Long पर पास होने पर कमांड लाइन तर्कों के समान पार्स करना चाहता हूं।मैं GetOpt :: Long :: GetOptions के साथ एक स्ट्रिंग का विश्लेषण कैसे करूं?

विस्तार से बता दें:

मैं एक स्ट्रिंग

$str = '--infile /tmp/infile_location --outfile /tmp/outfile' 

मैं चाहता हूँ यह GetOptions से पार्स किया जा सकता है ताकि यह मेरे नए विकल्प जोड़ने में आसान है।

एक वर्कअराउंड जो मैं सोच सकता हूं कि व्हाइटस्पेस पर स्ट्रिंग को विभाजित करना है और @ एआरजीवी को नई सरणी के साथ प्रतिस्थापित करना है और फिर GetOptions को कॉल करना है। कुछ ...

my @arg_arr = split (/\s/, $input_line); 

# This is done so that GetOptions reads these new arguments 
@ARGV = @arg_arr; 
print "ARGV is : @ARGV\n"; 
GetOptions (
      'infile=s' => \$infile, 
      'outfile=s' => \$outfile 
      ); 

क्या कोई अच्छा/बेहतर तरीका है?

उत्तर

7

व्हाइटस्पेस पर विभाजित करने के बजाय, अंतर्निर्मित ग्लोब फ़ंक्शन का उपयोग करें। व्हाइटस्पेस पर विभाजित करने के अलावा, वह मानक कमांड लाइन विस्तार करेगा, फिर एक सूची लौटाएगा। (उदाहरण के लिए * फाइलों की एक सूची देगी, आदि) मैं सामान्य सिद्धांत पर स्थानीय izing @ARG की भी सिफारिश करता हूं।

इसके अलावा, यह एकमात्र तरीका है जिसे आप GetOptions को फिर से लिखने के बिना कर सकते हैं। (स्पष्ट रूप से मुझे दस्तावेज़ीकरण को अधिक सावधानी से पढ़ने की आवश्यकता है।)

5

वाह !!!

मुझे लगता है कि मैं दोनों bentilly और dinomite के जवाब में से का उपयोग करें और निम्न कर सकते हैं:

  • उपयोग ग्लोब मानक कमांड लाइन विस्तार
  • getopt :: की GetOptionsFromArray विधि के लिए ग्लोब के बाद सरणी पारित प्रदर्शन करने के लिए लांग (here देख)

कोड कुछ की तरह लग सकता है ...

GetOptionsFromArray ([glob ($input_line)]); 

और यह केवल एक पंक्ति है .. ठंडा (मुझे पता है कि मुझे कुछ त्रुटि जांच आदि करना है) .. लेकिन इसका ठंडा ...

+0

पहला तर्क एक सरणी संदर्भ है, इसलिए आप "GetOptionsFromArray ([glob ($ input_line)], ...)" –

+0

धन्यवाद माइकल .. यहां कोड में परिवर्तन चला जाता है ... – Jagmal

0

जब आप गेटोपेट :: उपयोगकर्ता इनपुट के अलावा किसी अन्य चीज़ पर लंबे समय तक उपयोग करते हैं, ध्यान रखें कि कुछ विशेषताएं POSIXLY_CORRECT पर्यावरण चर के आधार पर भिन्न हैं। कॉन्फ़िगर करने के लिए आप उचित कॉल के साथ इसे ओवरराइड कर सकते हैं।

Obligatory POSIXLY_CORRECT anecdote

0

ऐसा लगता है कि GetOptionsFromArray और GetOptionsFromString को केवल v2.36 में जोड़ा गया था और जैसा कि मर्फी कहता है कि मेरे पास केवल संस्करण 2.35 है।

अभी के लिए, मुझे लगता है कि मुझे स्थानीय @ARGV के साथ रहना होगा।

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