में मदद करता है सवाल से उत्पादन दोहराने के लिए,
#! /usr/bin/env perl
use Data::Dumper;
print Dumper \%main::;
प्रविष्टियों आप देख gv_fetchfile_flags
में डाला जाता है चलाएँ:
/* This is where the debuggers %{"::_<$filename"} hash is created */
tmpbuf[0] = '_';
tmpbuf[1] = '<';
memcpy(tmpbuf + 2, name, namelen);
gv = *(GV**)hv_fetch(PL_defstash, tmpbuf, tmplen, TRUE);
if (!isGV(gv)) {
gv_init(gv, PL_defstash, tmpbuf, tmplen, FALSE);
#ifdef PERL_DONT_CREATE_GVSV
GvSV(gv) = newSVpvn(name, namelen);
#else
sv_setpvn(GvSV(gv), name, namelen);
#endif
}
इस तरह से कई बार कहा जाता है boot process in S_parse_body
के हिस्से के रूप में।
boot_core_PerlIO();
boot_core_UNIVERSAL();
boot_core_mro();
ध्यान दें कि आप भी perlio.c
, universal.c
, और उत्पादन में mro.c
के लिए प्रविष्टियों को देखें।
perldebguts documentation की Debugger Internals अनुभाग उनके उपयोग बताते हैं:
उदाहरण के लिए, जब भी आप फोन पर्ल के अंतर्निहित फोन करने वाले समारोह पैकेज DB
से, तर्क है कि इसी ढेर फ्रेम के साथ करने के लिए कॉपी कर रहे हैं बुलाया गया था @DB::args
सरणी। ये तंत्र -d
स्विच के साथ पर्ल को कॉल करके सक्षम हैं। विशेष रूप से, निम्नलिखित अतिरिक्त सुविधाओं (perlvar में सीएफ $^P
) सक्षम हैं:
- ...
- प्रत्येक सरणी
@{"_<$filename"}
पर्ल द्वारा संकलित एक फ़ाइल के लिए $filename
की तर्ज रखती है। यह भी स्पष्ट स्ट्रिंग्स के लिए सच है जिसमें subroutines शामिल हैं, या जिन्हें वर्तमान में निष्पादित किया जा रहा है। $filename
evaled तारों के लिए (eval 34)
जैसा दिखता है। रेगेक्स में कोड सम्मिलन (re_eval 19)
जैसा दिखता है।
- प्रत्येक हैश
%{"_<$filename"}
में लाइन नंबर के आधार पर ब्रेकपॉइंट और क्रियाएं शामिल हैं। व्यक्तिगत प्रविष्टियां (पूरे हैश के विपरीत) सेटटेबल हैं। पर्ल केवल बूलियन के बारे में परवाह करता है, हालांकि perl5db.pl
द्वारा उपयोग किए गए मानों में "$break_condition\0$action"
है।
मूल्यांकन स्ट्रिंग्स के लिए समान है जिसमें subroutines शामिल हैं, या जिन्हें वर्तमान में निष्पादित किया जा रहा है। Evaled तारों के लिए $ filename लगता है (eval 34) या (re_eval 19)।
- प्रत्येक स्केलर
${"_<$filename"}
में "_<$filename"
शामिल हैं। यह मूल्यांकन स्ट्रिंग्स का भी मामला है जिसमें subroutines शामिल हैं, या जिन्हें वर्तमान में निष्पादित किया जा रहा है। $filename
evaled तारों के लिए (eval 34)
या (re_eval 19)
जैसा दिखता है।
- प्रत्येक आवश्यक फ़ाइल संकलित होने के बाद, लेकिन इसे निष्पादित करने से पहले,
DB::postponed(*{"_<$filename"})
कहा जाता है अगर subroutine DB::postponed
मौजूद है। यहां, $filename
आवश्यक फ़ाइल का विस्तारित नाम है, जैसा कि %INC
के मानों में पाया गया है।
- ...
स्रोत
2011-06-28 16:31:55
उन फ़ाइलों को पर्ल प्रतीकों को परिभाषित दिखाई देते हैं। (उदा। 'universal.c' बनाता है '& utf8 :: नवीनीकरण')। – ikegami