मुझे पता है कि BEGIN ब्लॉक को एक पर्ल प्रोग्राम के मुख्य निकाय से पहले संकलित और निष्पादित किया गया है। आप इस बात का यकीन है कि नहीं कर रहे हैं बस इस पर आदेश पर्ल -cw चलाने की कोशिश:पर्ल में BEGIN ब्लॉक की भूमिका क्या है?
#!/ms/dist/perl5/bin/perl5.8
use strict;
use warnings;
BEGIN {
print "Hello from the BEGIN block\n";
}
END {
print "Hello from the END block\n";
}
मैं सिखाया गया है कि जल्दी संकलन और एक शुरू के निष्पादन ब्लॉक एक प्रोग्रामर यह सुनिश्चित करें कि कोई भी आवश्यक संसाधनों से पहले उपलब्ध हैं की सुविधा देता है मुख्य कार्यक्रम निष्पादित किया जाता है।
और इसलिए मैं यह सुनिश्चित करने के लिए BEGIN ब्लॉक का उपयोग कर रहा हूं कि डीबी कनेक्शन जैसी चीजें स्थापित की गई हैं और मुख्य कार्यक्रम द्वारा उपयोग के लिए उपलब्ध हैं। इसी प्रकार, मैं यह सुनिश्चित करने के लिए ईएनडी ब्लॉक का उपयोग करता हूं कि प्रोग्राम समाप्त होने से पहले सभी संसाधन बंद, हटाए गए, समाप्त हो जाएं।
आज सुबह एक चर्चा के बाद, मुझे आश्चर्य है कि क्या यह BEGIN और END ब्लॉक को देखने का गलत तरीका है।
पर्ल में एक BEGIN ब्लॉक की इच्छित भूमिका क्या है?
अद्यतन 1: बस पता चला कि डीबीआई कनेक्ट क्यों काम नहीं करता है। इस छोटे से पर्ल कार्यक्रम दिया जा रहा करने के बाद:
use strict;
use warnings;
my $x = 12;
BEGIN {
$x = 14;
}
print "$x\n";
जब निष्पादित यह प्रिंट 12.
अद्यतन 2: इस नए संस्करण नीचे एरिक स्ट्रॉम की टिप्पणी के लिए धन्यवाद यह स्पष्ट करता है:
use strict;
use warnings;
my $x = 12;
my $y;
BEGIN {
$x = 14;
print "x => $x\n";
$y = 16;
print "y => $y\n";
}
print "x => $x\n";
print "y => $y\n";
और आउटपुट
x => 14
y => 16
x => 12
y => 16
चालू सीई फिर से, धन्यवाद एरिक!
http://www.compuspec.net/reference/language/perl/BEGIN_and_END.shtml – jantimon
अगर ऐसा है, तो क्यों मैं एक करने के लिए एक DBI संबंध नहीं बना सकते मानक डीबीआई कनेक्ट() फ़ंक्शन का उपयोग करते हुए एक BEGIN ब्लॉक के भीतर डीबी? अगर मैं BEGIN ब्लॉक को हटा देता हूं, तो कनेक्शन –
आपके अपडेट के लिए बनाया गया है: ऐसा इसलिए है क्योंकि 'मेरा $ x = 12' परिवर्तनीय समय पर चर घोषित करता है लेकिन असाइनमेंट नहीं करता है। फिर स्टार्ट ब्लॉक चलता है जो 14 को असाइन करता है। फिर जब प्रोग्राम चलाना शुरू होता है, तो 'मेरी' लाइन का असाइनमेंट आपको 12 देता है। –