प्रश्न यह नहीं है कि ऑनलाइन पर कैसे बताना है। यदि आप एक लाइनर में कोड लिख रहे हैं, आप जानते हैं कि आप हैं। लेकिन -MMy::Module::Name
द्वारा शामिल मॉड्यूल को कैसे पता चलता है कि यह सब एक ऑनलाइन से शुरू हुआ है।यह बताए जाने का सबसे अच्छा तरीका क्या है कि आपका पर्ल चल रहा है या नहीं?
यह मेरा है। हालांकि यह गैर पोर्टेबल है और यूनिक्स मानक आदेशों पर निर्भर करता है (हालांकि, यह पोर्टेबल और अधिक या कम किया जा सकता है।)
my $process_info = `ps $$ | tail -1`;
my $is_oneliner
= $process_info =~ m/perl.*?\s+-[^\P{IsLower}e]*e[^\P{IsLower}e]*\s+/m
;
और यदि आप एक snazzier regex है, मेरा सुधार कर सकते हैं।
कुछ लोगों ने पूछा है कि मैं ऐसा क्यों करना चाहता हूं। ब्रायन ने सही ढंग से अनुमान लगाया कि मैं निर्यात स्क्रिप्ट को बदलना चाहता हूं कि यह एक स्क्रिप्ट है, जिसे हम मान सकते हैं कि इसमें कुछ मात्रा में डिज़ाइन है, या यह एक ऑनलाइनर है जहां उपयोगकर्ता एक कमांड लाइन में जितना संभव हो सके करने की कोशिश कर रहा है।
यह बुरा लग रहा है इस मूलमंत्र है कि निर्यातकों अन्य पैकेजों का सम्मान करना चाहिए क्योंकि - "! @EXPORT
बुराई है" कभी कभी जाना जाता है के रूप में लेकिन मुझे लगता है कि ऑनलाइनरों पर लागू होने पर यह मूर्खतापूर्ण स्थिरता है। सभी पर्ले स्वयं अपनी भाषा की संरचना का उल्लंघन करने के तरीके से बाहर निकलते हैं और यदि आप कमांड लाइन पर उनसे पूछते हैं तो आसान लूप देते हैं, मैं बस अपने परिचालन/व्यापार डोमेन के लिए उस विचार को विस्तारित करना चाहता हूं। मैं स्रोत फ़िल्टर (गैसपी!) भी लागू करना चाहता हूं, अगर यह मदद करता है।
लेकिन यह प्रश्न यह भी सुझाव देता है कि मैं पर्ल का भी एक अच्छा नागरिक बनना चाहूंगा, क्योंकि मैं केवल कुछ मामलों में समुदाय दिशानिर्देश तोड़ना चाहता हूं। यह एक नया नया मॉड्यूल लिखने के बजाय बैच शेड्यूलर में कमांड लाइन को बदलकर केवल प्रमुख व्यापार-स्तरीय कार्रवाइयां बनाने में सक्षम होने के लिए बहुत ही बढ़िया है। परीक्षण चक्र बहुत संकुचित है।
मॉड्यूल कभी इस बात पर ध्यान क्यों देगा कि इसे इस तरह से बुलाया गया था? – moonshadow