tokuhirom's Blog

!!1 とか !1 とかが PL_yes と PL_no になってるかどうか手軽にみる方法

以下のように、-MO=Terse すると、コンパイル時に定数の畳み込み最適化的な奴でたたみこまれて sv_yes とか sv_no になってることがわかる。

% perl -MO=Terse -e 'print !!1'
LISTOP (0x1ea6180) leave [1] 
    OP (0x1e96ba0) enter 
    COP (0x1ea5c60) nextstate 
    LISTOP (0x1ea62c0) print 
        OP (0x1e97510) pushmark 
        SVOP (0x1ea6410) const  SPECIAL (0x2) sv_yes 
% perl -MO=Terse -e 'print !1'
LISTOP (0x1151180) leave [1] 
    OP (0x1141ba0) enter 
    COP (0x1150c60) nextstate 
    LISTOP (0x1151410) print 
        OP (0x1142510) pushmark 
        SVOP (0x11512c0) const  SPECIAL (0x3) sv_no