2011-06-10 15 views
16

मैं पर्ल - केविन मिल्ट्जर के साथ सीजीआई आवेदन लिख रहा हूं। पुस्तक में ब्रेंट मिकाल्स्की

स्क्रिप्ट ज्यादातर इस के साथ शुरू:

#!"c:\strawberry\perl\bin\perl.exe" -wT 
# sales.cgi 
$|=1; 
use strict; 
use lib qw(.); 

लाइन $ क्या है | = 1; इसे कैसे स्थानांतरित करें, उदाहरण के लिए। $ | = 1; या $ | = 1; ? सख्त उपयोग क्यों करें; $ | = 1 के बाद; ?

धन्यवाद

+9

पर्ल के साथ सीजीआई आवेदन लिखना एक अच्छी किताब है, लेकिन बहुत, बहुत (10 साल!) पुरानी है। सर्वोत्तम प्रथाओं और भाषा पारिस्थितिकी तंत्र ने उस समय बहुत कुछ विकसित किया है, सुनिश्चित करें कि आपने कुछ हालिया सामग्री भी पढ़ी है, "आधुनिक पर्ल", या "सीखने की प्रतिलिपि" की खोज करें – mirod

+3

@mirod बस लापता लिंक को प्रदान करने के लिए [आधुनिक पेर्ल ऑन github] (https://github.com/chromatic/modern_perl_book) क्योंकि यह सक्रिय है और समय-समय पर अद्यतन हो जाता है। – mbx

+0

@mirod अब आपने मुझे नास्तिक बना दिया .. 1995, मैंने मैकिंटोश के लिए 'नेटस्केप' का उपयोग किया, और यह 1,44 एमबी फ्लॉपी डिस्क पर फिट हो सकता है। ;) – TLP

उत्तर

22

perlvar आपका मित्र है। यह इन सभी गुप्त विशेष चर दस्तावेजों को दस्तावेज करता है।

$ OUTPUT_AUTOFLUSH (उर्फ $ |):

तो अशून्य करने के लिए सेट, मजबूर करता एक फ्लश तुरंत और हर लिख सकते हैं या वर्तमान में चयनित उत्पादन चैनल पर प्रिंट के बाद। डिफ़ॉल्ट 0 है (इस पर ध्यान दिए बिना कि चैनल वास्तव में सिस्टम द्वारा बफर किया गया है या नहीं; $ | आपको केवल बताता है कि क्या आपने पर्ल से प्रत्येक लिखने के बाद स्पष्ट रूप से फ़्लश करने के लिए कहा है)। यदि आउटपुट टर्मिनल पर है और अन्यथा buffered ब्लॉक है तो STDOUT आम तौर पर लाइन buffered होगा। इस चर को सेट करना मुख्य रूप से उपयोगी होता है जब आप पाइप या सॉकेट पर आउटपुट कर रहे हैं, जैसे कि जब आप आरएसएच के तहत एक पर्ल प्रोग्राम चला रहे हों और आउटपुट को ऐसा होने के रूप में देखना चाहते हैं। इसका इनपुट बफरिंग पर कोई प्रभाव नहीं पड़ता है। इसके लिए getc देखें। आउटपुट चैनल का चयन कैसे करें इस पर चयन करें। आईओ :: हैंडल भी देखें।

स्मारक: जब आप चाहते हैं कि आपके पाइप गर्म हो जाएं।

हैप्पी कोडिंग।


अन्य प्रश्नों के लिए:

कोई कारण नहीं है कि use strict; प्रोग्रामर सम्मेलन के अलावा, $| बाद आती है। $| और अन्य विशेष चर इस तरह से सख्त से प्रभावित नहीं हैं। अंतर भी महत्वपूर्ण नहीं है - बस अपना सम्मेलन चुनें और सुसंगत रहें।(मैं रिक्त स्थान पसंद करता हूं।)

17

$| = 1; हर लिखने या प्रिंट के बाद एक फ्लश मजबूर करता है, तो उत्पादन जैसे ही यह बफ़र होने की बजाय उत्पन्न प्रकट होता है।

perlvar दस्तावेज़ीकरण देखें।

$| एक विशेष चर का नाम है। आपको $ और | के बीच एक जगह नहीं पेश करनी चाहिए।

चाहे आप = के आसपास सफेद जगह का उपयोग करें या पर्ल से कोई फर्क नहीं पड़ता। व्यक्तिगत रूप से मुझे लगता है कि रिक्त स्थान का उपयोग कोड को और अधिक पठनीय बनाता है।

क्यों use strict; सिवाय इसके कि वे दोनों बात की तरह आप शीर्ष पर सही डाल चाहते हैं कर रहे हैं, मैं नहीं जानता कि अपनी स्क्रिप्ट में $| = 1; के बाद आता है, और आप उन्हें एक आदेश में डाल करने के लिए है या अन्य। मुझे नहीं लगता कि यह महत्वपूर्ण है जो पहले आता है।

7

इससे कोई फर्क नहीं पड़ता कि आपकी स्क्रिप्ट में आप use कथन डालते हैं, क्योंकि वे सभी संकलन समय पर मूल्यांकन करते हैं।

$| ऑटोफ्लश के लिए अंतर्निहित चर है। मैं मानता हूं कि इस मामले में, यह संदिग्ध है। हालांकि, एक अकेला $ perl में मान्य कथन नहीं है, इसलिए उन्मूलन की प्रक्रिया के द्वारा, हम कह सकते हैं कि इसका क्या अर्थ होना चाहिए।

use lib qw(.) ऐसा करने के लिए एक मूर्ख चीज की तरह लगता है, "।" डिफ़ॉल्ट रूप से @INC में पहले से ही है। शायद यह किताब पुरानी होने के कारण है। यह कथन पार्ल को "।" जोड़ने के लिए कहता है। @INC सरणी के लिए, जो perl के लिए "पथ वातावरण" है, यानी जहां यह मॉड्यूल और ऐसे के लिए दिखता है।

+2

** इससे कोई फ़र्क नहीं पड़ता कि आपकी स्क्रिप्ट में आप कहां उपयोग कथन डालते हैं **: पूरी तरह से सत्य नहीं: 'सख्त उपयोग करें' कई * शब्दावली * प्रागमाओं में से एक है। यदि आपके पास 'ब्ला ब्लाह {सख्त उपयोग है; ब्लैग ब्लैग} ब्लै ब्लाह 'आपकी लिपि में, केवल "ब्लर्ग ब्लैग" सख्त प्रगति से ढकी जाएगी। – daotoad

+0

टेंट मोड में वर्तमान कार्य निर्देशिका को @INC से हटा देता है, इसलिए इसे lib qw (।) का उपयोग करके मॉड्यूल में वापस जोड़ने की आवश्यकता है। – Weiyan