पर्ल का डीबगर आपके इच्छित तरीके से खोद सकता है। उदाहरण के लिए:
main::(-e:1): 0
DB<1> sub foo {}
DB<2> x \&foo
0 CODE(0xca6898)
-> &main::foo in (eval 5)[/usr/share/perl/5.10/perl5db.pl:638]:2-2
यह इस Devel::Peek का उपयोग करता है:
Foo::bar
ध्यान दें कि उपरोक्त उदाहरण देता है:
=head2 C<CvGV_name_or_bust> I<coderef>
Calls L<Devel::Peek> to try to find the glob the ref lives in; returns
C<undef> if L<Devel::Peek> can't be loaded, or if C<Devel::Peek::CvGV> can't
find a glob for this ref.
Returns C<< I<package>::I<glob name> >> if the code ref is found in a glob.
=cut
sub CvGV_name_or_bust {
my $in = shift;
return unless ref $in;
$in = \&$in; # Hard reference...
eval { require Devel::Peek; 1 } or return;
my $gv = Devel::Peek::CvGV($in) or return;
*$gv{PACKAGE} . '::' . *$gv{NAME};
} ## end sub CvGV_name_or_bust
आप इसके साथ
#! /usr/bin/perl
use warnings;
use strict;
package Foo;
sub bar {}
package main;
BEGIN { *baz = \&Foo::bar }
sub CvGV_name_or_bust { ... }
print CvGV_name_or_bust(\&baz), "\n";
आउटपुट व्यायाम हो सकता है Foo:bar
एक अलग नाम है, लेकिन आप दोनों पैकेज प्राप्त करते हैं जहां उपनाम उप रहते हैं और इसका नाम भी है।
स्रोत
2010-09-10 14:13:01
क्या समस्या आप यह जानने के द्वारा हल करने के लिए प्रयास कर रहे हैं? ऐसा होने से पहले इसे ठीक करने का एक तरीका हो सकता है। :) –
रुबी में अन्य वर्गों के कार्यों को संशोधित करना आम हो सकता है, लेकिन पर्ल में एक काला कला है जिसे * अत्यंत * दुर्लभ परिस्थितियों के लिए आरक्षित किया जाना चाहिए। आपको ऐसा करने की ज़रूरत क्यों है? – Ether
@ 'ब्रायन डी फोय' तीन साल बाद मैं यह पुष्टि करने के लिए एक यूनिट टेस्ट लिखने की कोशिश कर रहा हूं कि मुझे एक शर्त के तहत एक फ़ंक्शन का शुद्ध-पर्ल संस्करण या अन्य किसी अन्य स्थिति के तहत एक एक्सएस संस्करण मिल जाए, और अचानक मेरे पास मुझे लगता है कि इस ओपी के quesiton के लिए एक वैध उपयोग-मामला है। ;) – DavidO