2009-10-02 11 views
7

मैं अभी भी पर्ल के लिए नया हूं। चूंकि संकलन के दौरान BEGIN ब्लॉक चलाए जाते हैं, इसलिए वायरस फैल नहीं सकता है या डेटा हानि बस संकलन से होती है? क्या पर्ल इसे रोकने के लिए कुछ भी करता है? यदि ऐसा है तो इसका मतलब यह है कि BEGIN ब्लॉक में कोड अलग-अलग कार्य कर सकता है?क्या एक पर्ल BEGIN ब्लॉक एक वायरस फैल सकता है या डेटा खो सकता है?

उत्तर

13

इन सभी सवालों के लिए हाँ। ग्रहण आईडीई इस के लिए कमजोर था। यह discussed in more detail here है।

सभी सॉफ़्टवेयर के साथ, आपको उस स्रोत से कुछ भी डाउनलोड करने और चलाने से बचना चाहिए जिस पर आप भरोसा नहीं करते हैं। सीपीएएन आम तौर पर भरोसेमंद है; हालांकि मुझे जानबूझकर सीपीएएन को नकली कोड जारी करने वाले किसी के बारे में पता नहीं है, यह संभव है कि यह हुआ हो।

आप $^C flag साथ संकलन जांच के दौरान कोड चलाने से बच सकते हैं .: उदा,

BEGIN { load_data_from_db() unless $^C; } 
+2

'$^सी' के बारे में उत्कृष्ट बिंदु। इसके लिए perlvar एंट्री का एक लिंक यहां दिया गया है: http://perldoc.perl.org/perlvar.html#$^C – daotoad

+0

@dotoad आपका लिंक टूटा हुआ था, इसलिए मैंने एक कार्य करने के लिए प्रतिक्रिया संपादित की। – Ether

1

ध्यान दें कि कभी कभी यह एक विशेषता है। Mod_perl मॉड्यूल के अंदर ब्लॉक को केवल एक बार निष्पादित किया जाता है, जब उन्हें पहले लोड किया जाता है। तो आपके पास एक ही स्क्रिप्ट में पेज-स्तरीय प्रारंभ करने के लिए एक सरल वाक्यविन्यास है, और इसे उस कोड के पास "पास" रखें जो यह सहायता करता है।

कभी-कभी यह जटिल प्रारंभिक कोड लिखने के लिए भी उपयोगी होता है जिसे आप किसी स्क्रिप्ट के शीर्ष पर नहीं रखना चाहते हैं।

लेकिन अधिकांशतः यह अजीब के साथ विषयगत संगतता के लिए है।

+1

यह अजीब की तरह दिखने से बहुत अधिक है। BEGIN ब्लॉक चीजों को अनुक्रमणित करने के लिए बहुत उपयोगी हैं। –

+0

क्या यह वही नहीं है जो मैंने कहा था? जिस वाक्य को आपने चुनने का निर्णय लिया था उससे पहले काफी कुछ पाठ था .. –

+1

@ एंडी - आपने कहा "ज्यादातर"। पर्ल सॉफ्टवेयर विकास के अपने कई वर्षों में, मैंने अवसरों के दर्पण पर कई कारणों से ब्लॉकों का उपयोग किया है (और इसे देखा है), और मैंने कभी इसे "अजीब के साथ विषयगत संगतता" का उपयोग नहीं किया है। – DVK

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