読者です 読者をやめる 読者になる 読者になる

初代Masteries

きっとモヒカンにもなれないお前たちに告げる!!!

B::Deparseで任意のCODEREFをDeparseする

perl

要するに個人用メモです.

use strict;
use warnings;
use B::Deparse;

my $coderef = sub {
    my $n = shift;
    return $n ** $n;
};

my $deparse = B::Deparse->new("-p", "-sC")->coderef2text($coderef);
print $deparse;

こんな感じで, B::Deparseをnewしてから, coderef2textメソッドに対して任意のコードリファレンスを与えると,

{
    use warnings;
    use strict;
    (my $n = (shift()));
    (return ($n ** $n));
}

こんな感じでDeparseしてくれるようです.

ちなみに,

use strict;
use warnings;
use B::Deparse;

sub function {
    my $n = shift;
    return $n ** $n;
};

my $deparse = B::Deparse->new("-p", "-sC")->coderef2text(\&{*function});
print $deparse;

黒魔術の代表例, 型グロブを使うことで, このように書くこともできるみたいです.