मैं अक्सर रोजगार के अपने स्थान पर एक विशाल, बहुत-अच्छी तरह से प्रलेखित, ऑब्जेक्ट उन्मुख पर्ल रेपो पर काम करता हूं। कोड को बनाए रखने के दौरान, मुझे अक्सर उन चीजों का पता लगाने की आवश्यकता होती है जो अन्य वर्गों से विरासत में प्राप्त होती हैं ताकि मैं समझ सकूं कि वे क्या कर रहे हैं। उदाहरण के लिए, मैं यह पता लगाने की क्या $self->mystery
है और यह क्या कर रही है की जरूरत है:निर्धारित करें कि मूस के गुण और तरीके कहाँ से विरासत में मिलीं?
package Foo::Bar;
use Moose;
use Method::Signatures;
use Foo::Bar::Element;
use Foo::Bar::Function;
use base qw (Baz::Foo::Bar);
method do_stuff ($some_arg) {
# mystery is not defined in Foo::Bar
my $mystery = $self->mystery;
$mystery->another_mystery($some_arg);
}
मैं आमतौर पर जिस तरह से बहुत अधिक समय माता-पिता कक्षाओं के माध्यम से पता लगाने के खर्च अपने आप पाते हैं। तो मेरा सवाल यह है कि, क्या यह पता लगाने के लिए एक आसान तरीका है कि $self->mystery
कहां से आता है? या दूसरे शब्दों में, मुझे यह जानने की ज़रूरत है कि रहस्य कहां घोषित किया गया है।
और "आसान तरीका" से, मेरा मतलब यह नहीं है कि फ़ाइलों के माध्यम से खोज करने के लिए ack
या grep
का उपयोग करना है। मुझे उम्मीद है कि कुछ प्रकार का डिबगिंग मॉड्यूल है जिसे मैं इंस्टॉल और उपयोग कर सकता हूं जो मुझे कुछ अंतर्दृष्टि देने में मदद कर सकता है।
धन्यवाद।
गंभीरता से, हालांकि, सभी कहा जाता है जब तक आप विभिन्न वर्गों में तरीकों में से एक * टन * है 'mystery',' पावती '^ उप mystery'' वास्तव में, जहां कि विधि परिभाषित किया गया है खोजने के लिए सबसे अच्छा तरीका है। –
आप यह स्पष्ट नहीं करते हैं कि आप इस जानकारी का उपयोग कैसे करना चाहते हैं। मैं चाहता हूं कि यह एक प्रोग्रामिंग आईडीई में उपलब्ध हो, लेकिन जब से आप * "कुछ प्रकार के डिबगिंग मॉड्यूल" * के लिए पूछते हैं, तो मानक डीबगर क्या आप चाहते हैं? आप बस विधि * में * चरण * का उपयोग कर सकते हैं और देख सकते हैं कि यह आपको कहां लेता है। – Borodin
@jcast - नहीं, बिल्कुल नहीं। 'रहस्य' एक मूस विशेषता हो सकती है। या इस रेपो के लिए उपयोग करें, यह लिखा गया है कि यह या तो 'उप' या 'विधि' हो सकता है। या यह एक हैंडलर विधि के रूप में परिभाषित किया जा सकता: 'है foo => (है => 'ro', संभालती है => [qw (बार रहस्य baz)]' –