जवाबों:
निर्भर करता है कि आपकी क्या करने की इच्छा है। यदि आप दो तर्कों को इनपुट फ़ाइलों के रूप में उपयोग करना चाहते हैं, तो आप उन्हें केवल पास कर सकते हैं और फिर <>उनकी सामग्री को पढ़ने के लिए उपयोग कर सकते हैं।
यदि उनके पास एक अलग अर्थ है, तो आप उपयोग कर सकते हैं 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।
Contains the name of the current file when reading from <> .
आप उन्हें उसी तरह से पास करते हैं जैसे आप सोच रहे हैं, और आपकी स्क्रिप्ट में, आप उन्हें सरणी से प्राप्त करते हैं @ARGV। इस तरह:
my $numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments.\n";
foreach my $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
से यहाँ ।
$#ARGV + 1आप यह भी कह सकते थे@ARGV
ARGV[0]या $argv[1]यदि आप विशेष तर्क के लिए देख रहे हैं।
foreach my $arg (@ARGV) {
print $arg, "\n";
}
प्रत्येक तर्क को मुद्रित करेगा।
वैकल्पिक रूप से, एक कामुक रास्ता .....
my ($src, $dest) = @ARGV;
"मान लें" दो मान पारित किए गए हैं। अतिरिक्त कोड सत्यापित कर सकता है कि धारणा सुरक्षित है।
@ARGVबिना किसी कार्रवाई के आप के माध्यम से उपलब्ध हैं , जैसे C / C ++ उन्हें argv / argc के माध्यम से आपूर्ति करते हैं
अभी तक एक और विकल्प पर्ल-एस का उपयोग करना है, जैसे:
#!/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
या अधिक जानकारी के लिए मूल लेख देखें:
यदि तर्कों को फिल्माया जाना है, तो उनकी सामग्री प्राप्त करने के लिए हीरे (<>) ऑपरेटर का उपयोग करें:
while (my $line = <>) {
process_line($line);
}
यदि तर्क विकल्प / स्विच हैं, तो GetOpt :: Std या GetOpt :: Long का उपयोग करें, जैसा कि पहले ही slavy13.myopenid.com द्वारा दिखाया गया है।
बंद मौके पर कि वे कुछ और हैं, आप उन्हें या तो @ARGV के माध्यम से या स्पष्ट रूप से shiftकमांड के साथ चलकर एक्सेस कर सकते हैं :
while (my $arg = shift) {
print "Found argument $arg\n";
}
(ध्यान दें कि ऐसा shiftकरना तभी काम करेगा जब आप सभी subs से बाहर हों । a के भीतर sub, यह subउन तर्कों की सूची को पुनः प्राप्त कर लेगा, जो कार्यक्रम में गए थे।
my $output_file;
if((scalar (@ARGV) == 2) && ($ARGV[0] eq "-i"))
{
$output_file= chomp($ARGV[1]) ;
}
यदि आप कुछ मूल्य चाहते हैं, तो आप सिर्फ @ARGV सरणी का उपयोग कर सकते हैं। लेकिन अगर आप कुछ कमांड लाइन विकल्प प्रसंस्करण करने के लिए कुछ अधिक शक्तिशाली की तलाश कर रहे हैं, तो आपको Getopt :: Long का उपयोग करना चाहिए ।
./script.plया एक पूरी तरह से कुछ नहीं हो रहा होगा 'रनटाइम आते हैं।