लगातार उपरोक्त, यानी एक खाली प्रोटोटाइप और निरंतर वापसी मूल्य के साथ subroutines, इनलाइन हैं। यही कारण है कि कैसे constant pragma स्थिरांक को परिभाषित करता है: अगर यह इसके पहले उपयोग करने से पहले देखा जाता है
sub five() { 5 }
inlined किया जाएगा।
अन्यथा, पर्ल रन-टाइम पर सबराउटिन को गतिशील रूप से फिर से परिभाषित करने की अनुमति देता है, इसलिए इनलाइनिंग उपयुक्त नहीं है।
subroutines के लिए जो हमेशा एक ही इनपुट को एक ही मान देता है, आप memoization का उपयोग कर सकते हैं।
Chapter 13 of Programming Perlperl
द्वारा किए गए अनुकूलन चरणों पर कुछ जानकारी प्रदान करता है।
इसे निरंतर फोल्डिंग कहा जाता है। निरंतर फोल्डिंग सरल मामलों तक ही सीमित नहीं है जैसे कि संकलन समय पर 2 ** 10 को 1024 में बदलना। यह फंक्शन कॉल को भी हल करता है - दोनों अंतर्निर्मित और उपयोगकर्ता द्वारा घोषित सबराउटिन जो अध्याय 6, सबराउटिन में "कॉन्स्टेंट फ़ंक्शंस इनलाइनिंग" अनुभाग से मानदंडों को पूरा करते हैं। फोरट्रान कंपाइलर्स के अपने आंतरिक कार्यों के कुख्यात ज्ञान की याद ताजा करती है, पर्ल यह भी जानता है कि संकलन के दौरान कॉल करने के लिए अपने स्वयं के अंतर्निर्मित कौन से हैं। यही कारण है कि यदि आप 0.0 के लॉग या ऋणात्मक निरंतर के वर्ग को लेने का प्रयास करते हैं, तो आपको एक संकलन त्रुटि होगी, रन-टाइम त्रुटि नहीं, और दुभाषिया कभी भी नहीं चल रहा है।
perldoc perlguts भी देखें।
आप के प्रभाव को देख सकते हैं निरंतर तह खुद:
#!/usr/bin/perl
use strict; use warnings;
sub log_ok() { 1 }
if (log_ok) {
warn "log ok\n";
}
perl -MO=Deparse t.pl
आउटपुट:
sub log_ok() { 1 }
use warnings;
use strict 'refs';
do {
warn "log ok\n"
};
t.pl syntax OK
यहाँ, निरंतर तह एक do
ब्लॉक के साथ if
ब्लॉक के प्रतिस्थापन के लिए नेतृत्व किया क्योंकि संकलक जानता था कि log_ok
हमेशा एक वास्तविक मूल्य वापस करेगा।
#!/usr/bin/perl
use strict; use warnings;
sub log_ok() { 0.5 > rand }
if (log_ok) {
warn "log ok\n";
}
Deparse उत्पादन:: दूसरी ओर, के साथ पर
sub log_ok() {
use warnings;
use strict 'refs';
0.5 > rand;
}
use warnings;
use strict 'refs';
if (log_ok) {
warn "log ok\n";
}
t.pl syntax OK
एक C
संकलक if (0.5 > rand)
साथ if (log_ok)
जगह ले ली है हो सकता है। perl
ऐसा नहीं करता है।
आपको अभी भी सलाह का पालन करना चाहिए भले ही इनलाइनिंग के अवसर पर्ल में अधिक सीमित लगते हैं। –