2011-03-25 9 views
10

मैं एक पर्ल स्क्रिप्ट जो stdin इनपुट पर दोनों आदेश पंक्ति तर्क और STDINपास कमांड लाइन तर्क के साथ-साथ पर्ल स्क्रिप्ट के लिए एसटीडीआईएन से इनपुट?

#!/usr/bin/perl -w 
use strict; 
use warnings; 

my $logpath = $ARGV[0]; 
print "logpath : $logpath\n"; 

print "Name : "; 
my $name = <>; 
chomp($name); 
print "my name is $name\n"; 

यह बंद नहीं लेता है। किसी भी कमांड लाइन या मानक इनपुट के लिए ठीक काम करता है लेकिन दोनों के लिए नहीं।

कोई कारण?

+0

मुझे खेद है महोदय, लेकिन आप क्या चाहते हैं? – orlp

उत्तर

18

बदलें

my $name = <>; 

को

my $name = <STDIN>; 

तो @ARGV कोई तत्व है, तो हीरा ऑपरेटर STDIN से लेकिन आपके मामले में पढ़ा जाएगा जब से तुम हालांकि आदेश पंक्ति तर्क से गुजर रहे हैं, @ARGV नहीं होगा खाली रहो तो जब आप नाम पढ़ने के लिए हीरा ऑपरेटर <> का उपयोग करते हैं, तो फ़ाइल के पहले पंक्ति को कमांड लाइन पर निर्दिष्ट नाम पढ़ा जाएगा।

+0

धन्यवाद दोस्त .... यह काम किया ... मुझे नहीं पता कि यह एक समस्या क्यों है .... – naveenhegde

+5

यह एक समस्या है क्योंकि <> @ARGV में फ़ाइलों से पढ़ता है। यदि आप इसके बजाय stdin से पढ़ना चाहते हैं, तो आपको यह सुनिश्चित करना होगा कि @ARGV खाली है। अपने प्रोग्राम को ठीक करने का एक वैकल्पिक तरीका <> का उपयोग करना जारी रखना है, लेकिन इसमें बदलें: मेरा $ logpath = shift; ताकि @ARGV खाली हो जाएगा। – tadmc

+0

शिफ्ट का उपयोग मेरे लिए काम किया, जबकि <> से बदलना नहीं था – Colin

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