2015-07-02 13 views
16

जब मैं पर्ल मॉड्यूल (*.pm) फ़ाइलों में <stdin> का उपयोग करता हूं, तो यह कीबोर्ड से इनपुट नहीं पढ़ रहा है, लेकिन जब मैं उसी स्थान पर <STDIN> का उपयोग करता हूं तो यह ठीक काम करता है।<stdin> और <STDIN> के बीच क्या अंतर है?

जब मैं <stdin> का उपयोग करता हूं तो इनपुट क्यों नहीं मिल रहा है?

+2

'stdin': प्यार अनियंत्रित विशेषताएं होना चाहिए। 'STDIN' – tjd

उत्तर

21

STDIN दस्तावेजीकृत फ़ाइल हैंडल है। stdin भी मौजूद है, जो STDIN पर उपनाम है, लेकिन यह केवल main:: पैकेज में काम करता है: main::stdinmain::STDIN जैसा है (जैसा कि perlop - Perl operators and precedence में प्रलेखित है)।

एक पैकेज में है, इसलिए,

package My::Package; 
sub xx { 
    print while <stdin>; 
} 

stdinMy::Package::stdin, जो मौजूद नहीं है के रूप में व्याख्या की है। आप पैकेज से main::stdin का उपयोग कर सकते हैं, लेकिन मानक STDIN का उपयोग कर सकते हैं (जो हमेशा पैकेज से भी main::STDIN पर इंगित करता है) बहुत साफ है।

+2

वाह के साथ चिपकाएं, 'stdin' के बारे में नहीं पता था! – ikegami

12

इस बारे में जानते हैं नहीं है, लेकिन यह में perlop

filehandles STDIN, STDOUT एक थ्रो-दूर पैरा में दर्ज पाया, और STDERR पूर्वनिर्धारित हैं। (फ़ाइल हैंडल stdin, stdout, और stderr संकुल को छोड़कर भी काम करेगा, जहां उन्हें वैश्विक के बजाय स्थानीय पहचानकर्ता के रूप में व्याख्या किया जाएगा।) अतिरिक्त फ़ाइल हैंडल दूसरों के बीच खुले() फ़ंक्शन के साथ बनाया जा सकता है। इस पर ब्योरे के लिए perlopunc में perlopentut और "खुला" देखें।

+2

किसी को यह क्यों पता चलेगा? – mob

+0

मैं वास्तव में सोचने की कोशिश कर रहा हूं कि इसे पहले स्थान पर करने का क्या मतलब होगा। मेरा मतलब है, मैं सिर्फ यह देख सकता था कि लोअरकेस उपनाम क्यों कुछ समझ सकता है, लेकिन अलग-अलग व्यवहार के साथ नहीं। – Sobrique

+3

यह शायद एक ऐतिहासिक चीज है जो संकुल से पुरानी है, और संकुल पेश किए जाने पर किसी को भी अपने व्यवहार को ठीक करने के लिए पर्याप्त परेशान नहीं किया गया था। – choroba

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