Arbeiten mit B::Deparse

Arbeiten mit B::Deparse

am 19.07.2007 11:29:23 von Ferry Bolhar

Hallo,

ich hätte zwei Fragen bzgl. B::Deparse:

Man kann ja mit

use B::Deparse;
print 'B::Deparse'::->new->coderef2text();

die durch die Codereferenz CV angegebene Subroutine
deparsen. Funktioniert prima.

Gibt es aber auch eine Möglichkeit, den Hauptcode auf
diese Art zu deparsen? Ich habe es mit

use B;
use B::Deparse;
my $main_cv = B::SV::object_2svref(B::main_cv);
print 'B::Deparse'->new->coderef2text($main_cv);

probiert - ich bekomme keinen Fehler, aber auch keine
Ausgabe!

Zweite Frage: gibt es eine Möglichkeit, sich mit Deparse
auch BEGIN/CHECK/INIT/END-Blöcke anzusehen? B
stellt dafür zwar die Funktionen B::begin_av/check_av/init_av
/end_av zur Verfügung, die Zugriff auf die betreffenden Arrays
gestatten, in denen die CVs dieser Blöcke abgelegt werden,
aber die von diesen Funktionen zurückgelieferten Objekte
sind alle vom Typ B::SPECIAL, hinter dem nichts mehr steckt
(man kann ihn z.B. nicht mehr mit B::SV::object_2svref in eine
Referenz konvertieren).

Achja: Perl 5.8.6 auf einer Fedora-Linux-Kiste.

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Arbeiten mit B::Deparse

am 20.07.2007 02:48:04 von David Haller

On Thu, 19 Jul 2007 11:29:23 +0200, Ferry Bolhar wrote:
> Gibt es aber auch eine Möglichkeit, den Hauptcode auf
> diese Art zu deparsen? Ich habe es mit
>
> use B;
> use B::Deparse;
> my $main_cv = B::SV::object_2svref(B::main_cv);
> print 'B::Deparse'->new->coderef2text($main_cv);

Suchst du evtl.

perl -MO=Deparse foo.pl

bzw.

use O ("Deparse");

Siehe: perldoc O und perldoc B::Deparse, auch in letzterem steht die
Kommandozeilenversion in der Synopsis...

-dnh

--
SIG kill(ed)

Re: Arbeiten mit B::Deparse

am 20.07.2007 17:30:27 von Ferry Bolhar

David Haller:

> Suchst du evtl.
>
> use O ("Deparse");
>
> Siehe: perldoc O und perldoc B::Deparse, auch in letzterem steht die
> Kommandozeilenversion in der Synopsis...

Ja, das ist schon mal super! Damit kann ich mir den Code
meines eben ablaufenden Skripts ansehen.

Frage: kann ich so auch irgendwie den Hauptcode eines
anderen Moduls, das mit "require" oder "do" geladen wurde,
untersuchen?

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at

Re: Arbeiten mit B::Deparse

am 20.07.2007 22:11:04 von David Haller

On Fri, 20 Jul 2007 17:30:27 +0200, Ferry Bolhar wrote:
> David Haller:
>
>> Suchst du evtl.
>>
>> use O ("Deparse");
[..]
> Frage: kann ich so auch irgendwie den Hauptcode eines
> anderen Moduls, das mit "require" oder "do" geladen wurde,
> untersuchen?

use O ("Deparse","-fABSOLUTER_DATEINAME_DES_MODULS");

HTH,
-dnh

--
Microsoft, what do you want to crash today?

Re: Arbeiten mit B::Deparse

am 23.07.2007 10:42:31 von Ferry Bolhar

David Haller:

>> Frage: kann ich so auch irgendwie den Hauptcode eines
>> anderen Moduls, das mit "require" oder "do" geladen wurde,
>> untersuchen?
>
> use O ("Deparse","-fABSOLUTER_DATEINAME_DES_MODULS");

Danke! Da hätte ich wirklich auch selbst draufkommen können.

LG, Ferry

--
Ing Ferry Bolhar
Magistrat der Stadt Wien - MA 14
A-1010 Wien
E-Mail: bol@adv.magwien.gv.at