आपको तीन-तर्क संस्करण का उपयोग करना चाहिए क्योंकि यह पागल नाम वाली फ़ाइलों के खिलाफ सुरक्षा करता है। निम्नलिखित पर विचार करें:
my $file = "<file.txt";
open(INPUTFILE, "< $file") or die "$!";
इस रूप को जोड़ देगा:
open(INPUTFILE, "< <file.txt") or die "$!";
... जिसका अर्थ है कि आप वास्तव में <file.txt
नामित एक के बजाय file.txt
नाम की एक फ़ाइल खोल देंगे।
open(my $fh, "<", $file.txt) or die "$!";
इस का कारण यह है कि जब $fh
क्षेत्र से बाहर चला जाता है, फ़ाइल बंद कर देता है:
अब, filehandle के लिए, आप एक शाब्दिक filehandle उपयोग करना चाहते हैं। इसके अलावा, अन्य प्रकार के फाइलहेडल (मुझे याद नहीं है कि इसे क्या कहा जाता है) वैश्विक गुंजाइश है। प्रोग्रामर सभी कल्पनाशील नहीं हैं, इसलिए संभव है कि आप अपने फ़ाइल हैंडल INPUTFILE
या FH
या FILEHANDLE
नाम दें। क्या होता है यदि किसी और ने ऐसा किया है, तो आपके द्वारा उपयोग किए जाने वाले मॉड्यूल में, उनके फाइलहेडल INPUTFILE
नामित किया गया है? खैर, वे दोनों मान्य हैं और एक क्लॉबर्स दूसरे हैं। कौन सा क्लॉबर्स? कौन जाने। जब वे खोले जाते हैं तो यह आदेश देने पर निर्भर करता है। और बंद हो रहा है? और क्या होता है यदि अन्य प्रोग्रामर ने INPUTFILE
खोला है लेकिन वास्तव में इसे लिखने के लिए खोला है? दुनिया खत्म, मेरे दोस्त, दुनिया खत्म हो गया।
आप एक शाब्दिक filehandle का उपयोग करते हैं ($fh
) आप को समाप्त होने वाले दुनिया के बारे में चिंता है क्योंकि फोन यह $fh
, चर गुंजाइश clobbering से बचाता है भले ही अन्य प्रोग्रामर करता नहीं है।
तो हां, हमेशा open()
के तीन-तर्क फ़ॉर्म का उपयोग लेक्सिकल फ़ाइल हैंडल के साथ करें। दुनिया को बचाओ।
open(INFO, ">", $datafile) || die "Can't create $datafile: $!";
:
[एसओ पर्ल एफएक्यू] से [http://stackoverflow.com/questions/tagged/perl?sort=faq): [पर्लिकल फाइलहेडल्स के साथ तीन-तर्क खुली कॉल क्यों एक पर्ल सर्वश्रेष्ठ अभ्यास है?] (Http: //stackoverflow.com/questions/1479741/why-is-three-argument-open-calls-with-lexical-filehandles-a-perl-best-practice) – daxim