मैं एक पर्ल स्क्रिप्ट पर काम कर रहा हूं। मैं इसे कमांड लाइन पैरामीटर कैसे पास कर सकता हूं?मैं पर्ल प्रोग्राम में कमांड लाइन तर्क कैसे पास कर सकता हूं?
उदाहरण:
script.pl "string1" "string2"
मैं एक पर्ल स्क्रिप्ट पर काम कर रहा हूं। मैं इसे कमांड लाइन पैरामीटर कैसे पास कर सकता हूं?मैं पर्ल प्रोग्राम में कमांड लाइन तर्क कैसे पास कर सकता हूं?
उदाहरण:
script.pl "string1" "string2"
आप जो करना चाहते हैं उस पर निर्भर करता है। यदि आप इनपुट फ़ाइलों के रूप में दो तर्कों का उपयोग करना चाहते हैं, तो आप उन्हें केवल इन्हें पास कर सकते हैं और फिर <>
का उपयोग अपनी सामग्री को पढ़ने के लिए कर सकते हैं।
यदि उनके पास एक अलग अर्थ है, तो आप उन्हें आसानी से संसाधित करने के लिए GetOpt::Std
और GetOpt::Long
का उपयोग कर सकते हैं। GetOpt::Std
केवल एकल वर्ण स्विच का समर्थन करता है और GetOpt::Long
अधिक लचीला है। GetOpt::Long
से:
use Getopt::Long;
my $data = "file.dat";
my $length = 24;
my $verbose;
$result = GetOptions ("length=i" => \$length, # numeric
"file=s" => \$data, # string
"verbose" => \$verbose); # flag
वैकल्पिक रूप से, @ARGV
एक विशेष चर है कि सभी आदेश पंक्ति तर्क होता है। $ARGV[0]
पहला है (यानी "string1"
आपके मामले में) और $ARGV[1]
दूसरा तर्क है। @ARGV
तक पहुंचने के लिए आपको विशेष मॉड्यूल की आवश्यकता नहीं है।
$ ARGV [0] पहला तर्क है; perl 0 से गिना जाता है, और प्रोग्राम का नाम $ 0 में @ARGV नहीं है। $ ARGV [0] भ्रम के बावजूद – derobert
.. यह एक ऐसा उत्तर है जिसे मैं ढूंढने की उम्मीद करता हूं, जब मैं एसओ, धन्यवाद और +1 से खोजता हूं। – lexu
$ एआरजीवी वेरिएबल है जो मैं तब उपयोग करूंगा। धन्यवाद। – lamcro
आप उन्हें में ठीक वैसे ही जैसा आप सोच रहे हैं गुजरती हैं, और अपनी स्क्रिप्ट में, आप उन्हें सरणी @ARGV
से मिलता है। इस तरह:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
here से।
यह भी ध्यान देने योग्य है कि कुछ प्रोग्रामिंग भाषाओं में पहला (0) तर्क कमांड या स्क्रिप्ट है ... हालांकि, बिलकुल भी नहीं। – danieltalsky
'$ # एआरजीवी + 1' के बजाय आप यह भी कह सकते थे कि 'एआरजीवी' –
केवल' एआरजीवी [0] 'या' $ argv [1] 'का उपयोग करें यदि आप विशेष तर्क की तलाश में हैं। – Manoj
foreach my $arg (@ARGV) {
print $arg, "\n";
}
प्रत्येक तर्क मुद्रित करेगा।
यदि गेटोपेट्स का उपयोग नहीं करते हैं, तो इस तरह मैं एक तर्क सूची को गैर विनाशकारी रूप से पार करने की अनुशंसा करता हूं। Http://www.perlmeme.org/howtos/syntax/foreach.html के आधार पर ऐसा लगता है कि वाक्यविन्यास सही है; एक चेतावनी के लिए, अनुभाग, _Side-Effects की जांच करें: नियंत्रण चर सूची तत्व के लिए उपनाम है – jaredor
तर्क फ़ाइल नाम से पढ़ा जा करने के लिए कर रहे हैं, उनकी सामग्री पर प्राप्त करने के लिए हीरा (<>) ऑपरेटर का उपयोग करें:
while (my $line = <>) {
process_line($line);
}
तर्क विकल्प/स्विच कर रहे हैं, getopt :: कक्षा या getopt का उपयोग :: लंबा, जैसा कि पहले से ही slavy13.myopenid.com द्वारा दिखाया गया है।
है कि वे कुछ और, आप उन्हें या तो स्पष्ट रूप @ARGV के माध्यम से चलने से या shift
आदेश के साथ उपयोग कर सकते हैं कर रहे हैं बंद मौका पर:
while (my $arg = shift) {
print "Found argument $arg\n";
}
(ध्यान दें कि shift
के साथ ऐसा करने को केवल तभी काम करेंगे आप सभी sub
रों के बाहर हैं। एक sub
के भीतर, यह नहीं बल्कि कार्यक्रम के लिए पारित किया उन लोगों की तुलना sub
के लिए पारित किया तर्कों की सूची प्राप्त हो सकें।)
तुम सिर्फ कुछ मान चाहते हैं, तो आप सिर्फ @ARGV उपयोग कर सकते हैं सरणी। लेकिन अगर आप कुछ कमांड लाइन विकल्प प्रोसेसिंग करने के लिए कुछ और अधिक शक्तिशाली खोज रहे हैं, तो आपको Getopt::Long का उपयोग करना चाहिए।
वैकल्पिक रूप से, एक sexier perlish तरह से .....
my ($src, $dest) = @ARGV;
"मानता" दो मानों पारित कर रहे हैं। अतिरिक्त कोड सत्यापित कर सकता है कि धारणा सुरक्षित है।
यह सुनिश्चित नहीं है कि यह नई जानकारी कैसे है, लेकिन मैंने फैसला किया एक डाउनवोट के खिलाफ, क्योंकि आप नए हैं। –
यह कामुक नहीं है। सभी ** तर्क आपके द्वारा किसी भी कार्रवाई के बिना '@ एआरजीवी' के माध्यम से उपलब्ध हैं ** जैसे सी/सी ++ उन्हें argv/argc –
फिर भी एक और विकल्प का उपयोग करने के लिए है पर्ल -s, जैसे:
#!/usr/bin/perl -s
print "value of -x: $x\n";
print "value of -name: $name\n";
तो यह इस तरह कहते हैं:
% ./myprog -x -name=Jeff
value of -x: 1
value of -name: Jeff
या अधिक जानकारी के लिए the original article देखें:
के माध्यम से आपूर्ति करते हैं बहुत अच्छा और सरल! –
आप उपयोग कर सकते हैं वेरिएबल्स की सूची में विशेष चर @ARGV
असाइन करके सीधे उन्हें। तो, उदाहरण के लिए:
($st, $prod, $ar, $file, $chart, $e, $max, $flag ,$id) = @ARGV;
पर्ल tmp.pl 1 2 3 4 5
और इसका उपयोग कैसे किया जाता है? –
अद्यतन टिप्पणी की जांच करें, आपको बस कमांडलाइन स्पेस से अलग होना होगा – pkm
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
अपने कोड पर अधिक जानकारी दें –
कौन सा खोल उपयोग करते हैं? – reinierpost
ठीक है, सबसे पहले, आपको इसकी आवश्यकता होगी।/Script.pl' या पूरी लोटा नहीं 'रनटाइम आ जाएगा। –