僕と契約して、(ry

Jul 6, 2011

Shibuya.pm #16

id:sugyan

self-introduction

my $profile = +{
    id   => 'sugyan',
    name => 'すぎゃーん',
    age  => 0x1C,
    lang => ['Perl', 'Node.js', 'Objective-C'],
};

Quine ruBy

     eval                                       s||=
     %q(1;t=                                 %w(s.gs
      ub!(/\e.*                           ?m/,"");[
      [  0x26e885c     a844a879e27     a,519,48,  5
       ,  9],[20182686,600,48,5,1],[4366,611,48  ,
       5    ,15],[432803624050570,533,0]].map    {
        | r,m,*d|s[m+=r%74,0],r="\e[#{d*";"}m", r
        /74while(r>0)};puts((z=32.chr)*5+"eval#{z
        *39}s||=\n#{z*5}%q(#{(1+n=s.to_i)%3}#{s[1
       ..- 1]})\n\n"+z*9*n+"5YOV44GvUnVieWlzdO OBq
      +OB quOBo+OBpuOBj+OCjOOBo+OBpuOAgeOBjeOBo eOC
     k+OB qOOBi     umhmOOBhOOBl+OBn+     OBr+O BmuO
    BoOO CiO+8    nw ogIOWun+mam+OBr    ui ogOiq nuS7
   leanm OOBjO       OBqeOBhuOBhOOBh       uOCgu OBruO
   Bi+OA geiqrO     aYjuOCkuecgeeVpeO     Bl+OBn +OBke
  OCjOOB qeOAgi/lg5XjgajlpZHntITjgZfjgabjgIFSdWJ 5aXN04
  4Gr44G q44Gj44Gm5qyy44GX44GE44KT44GgL+WQm+OBn+ OBoeOB
 r+OBhOOB pOOCguOBneOBhu  O   B  oOOBreOAggrkup Lmj5vmgK
 fjgafjg   4/jg57jgovjgaj   m   sbrjgb7jgaPjga   blkIzjg
Zjlj43lv    5zjgpLjgZnjgovjgILoqLPjgYzliIbjgY    vjgonjga
rjgYTjgo       g=".gsub(/\e.*?m/,"").unpac       k("m")[0
].split(           "/")[n]);exit)*"";;           eval(t))
      

http://d.hatena.ne.jp/ku-ma-me/20110405/p1

Quine ruBy

$ cat qb.rb
     eval                                       s||=
     %q(1;t=                                 %w(s.gs
      ub!(/\e.*                           ?m/,"");[
      [  0x26e885c     a844a879e27     a,519,48,  5
       ,  9],[20182686,600,48,5,1],[4366,611,48  ,
       5    ,15],[432803624050570,533,0]].map    {
        | r,m,*d|s[m+=r%74,0],r="\e[#{d*";"}m", r
        /74while(r>0)};puts((z=32.chr)*5+"eval#{z
        *39}s||=\n#{z*5}%q(#{(1+n=s.to_i)%3}#{s[1
       ..- 1]})\n\n"+z*9*n+"5YOV44GvUnVieWlzdO OBq
      +OB quOBo+OBpuOBj+OCjOOBo+OBpuOAgeOBjeOBo eOC
     k+OB qOOBi     umhmOOBhOOBl+OBn+     OBr+O BmuO
    BoOO CiO+8    nw ogIOWun+mam+OBr    ui ogOiq nuS7
   leanm OOBjO       OBqeOBhuOBhOOBh       uOCgu OBruO
   Bi+OA geiqrO     aYjuOCkuecgeeVpeO     Bl+OBn +OBke
  OCjOOB qeOAgi/lg5XjgajlpZHntITjgZfjgabjgIFSdWJ 5aXN04
  4Gr44G q44Gj44Gm5qyy44GX44GE44KT44GgL+WQm+OBn+ OBoeOB
 r+OBhOOB pOOCguOBneOBhu  O   B  oOOBreOAggrkup Lmj5vmgK
 fjgafjg   4/jg57jgovjgaj   m   sbrjgb7jgaPjga   blkIzjg
Zjlj43lv    5zjgpLjgZnjgovjgILoqLPjgYzliIbjgY    vjgonjga
rjgYTjgo       g=".gsub(/\e.*?m/,"").unpac       k("m")[0
].split(           "/")[n]);exit)*"";;           eval(t))
      

Quine ruBy

$ ruby-1.9.2-p180 qb.rb
     eval                                       s||=
     %q(2;t=                                 %w(s.gs
      ub!(/\e.*                           ?m/,"");[
      [  0x26e885c     a844a879e27     a,519,48,  5
       ,  9],[20182686,600,48,5,1],[4366,611,48  ,
       5    ,15],[432803624050570,533,0]].map    {
        | r,m,*d|s[m+=r%74,0],r="\e[#{d*";"}m", r
        /74while(r>0)};puts((z=32.chr)*5+"eval#{z
        *39}s||=\n#{z*5}%q(#{(1+n=s.to_i)%3}#{s[1
       ..- 1]})\n\n"+z*9*n+"5YOV44GvUnVieWlzdO OBq
      +OB quOBo+OBpuOBj+OCjOOBo+OBpuOAgeOBjeOBo eOC
     k+OB qOOBi     umhmOOBhOOBl+OBn+     OBr+O BmuO
    BoOO CiO+8    nw ogIOWun+mam+OBr    ui ogOiq nuS7
   leanm OOBjO       OBqeOBhuOBhOOBh       uOCgu OBruO
   Bi+OA geiqrO     aYjuOCkuecgeeVpeO     Bl+OBn +OBke
  OCjOOB qeOAgi/lg5XjgajlpZHntITjgZfjgabjgIFSdWJ 5aXN04
  4Gr44G q44Gj44Gm5qyy44GX44GE44KT44GgL+WQm+OBn+ OBoeOB
 r+OBhOOB pOOCguOBneOBhu  O   B  oOOBreOAggrkup Lmj5vmgK
 fjgafjg   4/jg57jgovjgaj   m   sbrjgb7jgaPjga   blkIzjg
Zjlj43lv    5zjgpLjgZnjgovjgILoqLPjgYzliIbjgY    vjgonjga
rjgYTjgo       g=".gsub(/\e.*?m/,"").unpac       k("m")[0
].split(           "/")[n]);exit)*"";;           eval(t))

         僕と契約して、Rubyistになって欲しいんだ
      

Quine ruBy

$ ruby-1.9.2-p180 qb.rb | ruby-1.9.2-p180
     eval                                       s||=
     %q(0;t=                                 %w(s.gs
      ub!(/\e.*                           ?m/,"");[
      [  0x26e885c     a844a879e27     a,519,48,  5
       ,  9],[20182686,600,48,5,1],[4366,611,48  ,
       5    ,15],[432803624050570,533,0]].map    {
        | r,m,*d|s[m+=r%74,0],r="\e[#{d*";"}m", r
        /74while(r>0)};puts((z=32.chr)*5+"eval#{z
        *39}s||=\n#{z*5}%q(#{(1+n=s.to_i)%3}#{s[1
       ..- 1]})\n\n"+z*9*n+"5YOV44GvUnVieWlzdO OBq
      +OB quOBo+OBpuOBj+OCjOOBo+OBpuOAgeOBjeOBo eOC
     k+OB qOOBi     umhmOOBhOOBl+OBn+     OBr+O BmuO
    BoOO CiO+8    nw ogIOWun+mam+OBr    ui ogOiq nuS7
   leanm OOBjO       OBqeOBhuOBhOOBh       uOCgu OBruO
   Bi+OA geiqrO     aYjuOCkuecgeeVpeO     Bl+OBn +OBke
  OCjOOB qeOAgi/lg5XjgajlpZHntITjgZfjgabjgIFSdWJ 5aXN04
  4Gr44G q44Gj44Gm5qyy44GX44GE44KT44GgL+WQm+OBn+ OBoeOB
 r+OBhOOB pOOCguOBneOBhu  O   B  oOOBreOAggrkup Lmj5vmgK
 fjgafjg   4/jg57jgovjgaj   m   sbrjgb7jgaPjga   blkIzjg
Zjlj43lv    5zjgpLjgZnjgovjgILoqLPjgYzliIbjgY    vjgonjga
rjgYTjgo       g=".gsub(/\e.*?m/,"").unpac       k("m")[0
].split(           "/")[n]);exit)*"";;           eval(t))

                  君たちはいつもそうだね。
互換性でハマると決まって同じ反応をする。訳が分からないよ
      

Quine ruBy

$ ruby-1.9.2-p180 qb.rb | ruby-1.9.2-p180 | ruby-1.9.2-p180
     eval                                       s||=
     %q(1;t=                                 %w(s.gs
      ub!(/\e.*                           ?m/,"");[
      [  0x26e885c     a844a879e27     a,519,48,  5
       ,  9],[20182686,600,48,5,1],[4366,611,48  ,
       5    ,15],[432803624050570,533,0]].map    {
        | r,m,*d|s[m+=r%74,0],r="\e[#{d*";"}m", r
        /74while(r>0)};puts((z=32.chr)*5+"eval#{z
        *39}s||=\n#{z*5}%q(#{(1+n=s.to_i)%3}#{s[1
       ..- 1]})\n\n"+z*9*n+"5YOV44GvUnVieWlzdO OBq
      +OB quOBo+OBpuOBj+OCjOOBo+OBpuOAgeOBjeOBo eOC
     k+OB qOOBi     umhmOOBhOOBl+OBn+     OBr+O BmuO
    BoOO CiO+8    nw ogIOWun+mam+OBr    ui ogOiq nuS7
   leanm OOBjO       OBqeOBhuOBhOOBh       uOCgu OBruO
   Bi+OA geiqrO     aYjuOCkuecgeeVpeO     Bl+OBn +OBke
  OCjOOB qeOAgi/lg5XjgajlpZHntITjgZfjgabjgIFSdWJ 5aXN04
  4Gr44G q44Gj44Gm5qyy44GX44GE44KT44GgL+WQm+OBn+ OBoeOB
 r+OBhOOB pOOCguOBneOBhu  O   B  oOOBreOAggrkup Lmj5vmgK
 fjgafjg   4/jg57jgovjgaj   m   sbrjgb7jgaPjga   blkIzjg
Zjlj43lv    5zjgpLjgZnjgovjgILoqLPjgYzliIbjgY    vjgonjga
rjgYTjgo       g=".gsub(/\e.*?m/,"").unpac       k("m")[0
].split(           "/")[n]);exit)*"";;           eval(t))

僕はRubyistになってくれって、きちんとお願いしたはずだよ?
  実際の言語仕様がどういうものか、説明を省略したけれど。
      

Perl版 作りました

     eval                                       (($q
     ||=q{1;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;
      

http://d.hatena.ne.jp/sugyan/20110415/1302802885

Perl版 作りました

$ cat qb.pl
     eval                                       (($q
     ||=q{1;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;
      

Perl版 作りました

$ perl qb.pl
     eval                                       (($q
     ||=q{0;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;

      僕と契約してPerlMongerになって欲しいんだ
      

Perl版 作りました

$ perl qb.pl | perl
     eval                                       (($q
     ||=q{1;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;

               君たちはいつもそうだね
TMTOWTDIといって可読性の低いコードを書く.訳が分からないよ
      

JavaScript版

     eval                                       ($a=
     'a=1;p=                                 this[1\
      &&"alert"                           ]?(a=0+0\
      )  ||alert:1     &&this["p"+     "rint"]?(  \
       1  &&print):console.log,u=unescape,q=u((  \
       0    ||"%27")),f=Function,x=f("t,n","v    \
        = [];while(n--)v+=t;return"+(s=u("%20") \
        )+"v"),n=u("%0a"),r=[45,95,145,194,243,1\
        +290,339,387,436,486,537,589,642,695,749\
       ,53 +750,858,913,969];for(i=19;i--;)$a= $a\
      [(e ="replace")](RegExp(".{"+r[i]+"}"),"" +(\
     "$&" )+(b=     u("%5c"))+n);if(a     ){c=[ 5,(\
    45), 5,55,    2, 31,58,43,2,31,(    58 ),53, 1,(\
   30),( 86),(       58),43,1,30,86,       58,53 ,5,(\
   45),5 ,28],o     =521;for(i=26;i--     ;){$a= $a[e\
  ](($a) .substr(0,o+c[i]%28),"$&"+u("%1b")+"["+ (d=[(\
  "0"),( "48;5;9"),"48;5;1","48;5;15"][Math["fl" +"oo"\
 +"r"](c[ i]/28)])+"m");  ;   o  +=c[i]%28+3+d. length}\
 };p(x(s   ,5)+"eval"+x(s   ,   39)+"($a="+n+x   (s,5)+\
q+$a+q+n    +"."+e+x(s,11)+"(/"+b+("x1b")+b+(    "[.*?"+\
"m/mig,"       +"/*")+x(s,11)+"qb*/"+q+q+(       "))"));'
.replace           (/\x1b\[.*?m/mig,/*           qb*/''))
      

http://d.hatena.ne.jp/sugyan/20110519/1305780500

JavaScript版

$ js qb.js
     eval                                       ($a=
     'a=1;p=                                 this[1\
      &&"alert"                           ]?(a=0+0\
      )  ||alert:1     &&this["p"+     "rint"]?(  \
       1  &&print):console.log,u=unescape,q=u((  \
       0    ||"%27")),f=Function,x=f("t,n","v    \
        = [];while(n--)v+=t;return"+(s=u("%20") \
        )+"v"),n=u("%0a"),r=[45,95,145,194,243,1\
        +290,339,387,436,486,537,589,642,695,749\
       ,53 +750,858,913,969];for(i=19;i--;)$a= $a\
      [(e ="replace")](RegExp(".{"+r[i]+"}"),"" +(\
     "$&" )+(b=     u("%5c"))+n);if(a     ){c=[ 5,(\
    45), 5,55,    2, 31,58,43,2,31,(    58 ),53, 1,(\
   30),( 86),(       58),43,1,30,86,       58,53 ,5,(\
   45),5 ,28],o     =521;for(i=26;i--     ;){$a= $a[e\
  ](($a) .substr(0,o+c[i]%28),"$&"+u("%1b")+"["+ (d=[(\
  "0"),( "48;5;9"),"48;5;1","48;5;15"][Math["fl" +"oo"\
 +"r"](c[ i]/28)])+"m");  ;   o  +=c[i]%28+3+d. length}\
 };p(x(s   ,5)+"eval"+x(s   ,   39)+"($a="+n+x   (s,5)+\
q+$a+q+n    +"."+e+x(s,11)+"(/"+b+("x1b")+b+(    "[.*?"+\
"m/mig,"       +"/*")+x(s,11)+"qb*/"+q+q+(       "))"));'
.replace           (/\x1b\[.*?m/mig,/*           qb*/''))
      

Quine

クワイン (プログラミング)

クワイン(英: Quine)は、コンピュータプログラムにおけるメタプログラミングの一形態であり、自身の完全なソースコードだけを出力するプログラムである。

http://ja.wikipedia.org/wiki/クワイン_(プログラミング)

Quineの基礎

$_=q{print"\$_=q{$_};eval"};eval

もしくは

eval($_=q{print"eval(\$_=q{$_})"})

Quineの基礎

$_=q{
# \(^o^)/
my $hoge = 3.141592;

print"\$_=q{$_};eval"};eval
        

一部を除き自由に書ける

eval + print

     eval                                       (($q
     ||=q{1;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;
      

eval + print

     eval                                       (($q
     ||=q{1;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;
      

coloring

ANSI escape code

$ perl -E'say "foo\e[32mbar\e[mbaz"'
foobarbaz

$ perl -E'say "foo\e[42,30mbar\e[mbaz"'
foobarbaz
      

coloring

     eval                                       (($q
     ||=q{1;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;
      

uuencode

$ perl -E 'say pack("u", "僕と契約して")'
2Y8.5XX&HY:61Y[2$XX&7XX&F

$ perl -E 'say unpack("u", "2Y8.5XX&HY:61Y[2\$XX&7XX&F")'
僕と契約して
      

uuencode

     eval                                       (($q
     ||=q{1;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;
      

use utf8;

$ echo 'ほげ' | perl
Unrecognized character \xE3 in column 1 at - line 1.
$ echo 'ほげ' | perl -Mutf8
$
      

use utf8;

package utf8;

$utf8::hint_bits = 0x00800000;

sub import {
    $^H |= $utf8::hint_bits;
    $enc{caller()} = $_[1] if $_[1];
}
      

use utf8;

     eval                                       (($q
     ||=q{1;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;
      

なんとなく"use utf8"って書きたくなかった

整形

無駄に分割する

**** *  ****
chr(32)

**** *  ****
chr( 2  +30)
      

整形

無駄に分割する

*** ******
"eval"
      
*** ******
"e" ."val"
      

整形

無駄に括る

* * *****
43,

* * *****
( ( 43)),
      

整形

無駄に変換する

***********************
"{$b;\n"
      

***********************
"\x7b"."$b".('`%'^'[/')
      

整形

無駄に字数を稼ぐ

** * **************

** * **************
(' q '?"":q{b}x999)
      

正規表現!

     eval                                       (($q
     ||=q{1;                                 $b=qq{$
      q\x7d))}.                           join(chr(
      2  +30)x11,(     ";","BEGIN"     .'{$^H|='  .
       (  "0x800000"),q"}eval$b"));$b=~s/\e\[.*  ?
       m    //xg;for(28,5,45,5,53,58,86,30,1,    (
        ( 43)),58,86,30,1,53,58,31,2,43,58,31,2 ,
        55,5,45,5){$~=(0,"48;5;9","48;5;1","48;5"
        .";15")[$_/28];substr($b,517+$i+($_%28),0
       ,() ."\e[$~m");$i+=length($~)+3+($_%28) };(
      $n= ($q+1)%2);$b=~s/./$n/;($qb='M("`@("`@ Y8.
     5XX& HY:61     Y[2$XX&7XX&F4&5R;     $UO;F =E<N
    .!J^ .!JN.    !H ^.!MIN:LLN.!E^.    !A .."D^ .!H"
   P@("` @("`@       ("`@("`@("#ED)O       C@9_C @:\'C
   @:_CM @83C@:     3C@H+C@9WC@8;C@:#     C@:T*5 $U43U
  =41$GC @:CC@83C@:/C@:;ECZ_HMJJWF@*?C@:[DO8[C@8 3C@K/C
  @[SC@X GC@I+FF[CC@8\NZ*BSXX&,Y8B&XX&+,XX*)XX&J XX&$XX
 *(')=~s/ \x20|\x0a|\e.*  ?   m  //xg;print((q[ ]x5)."e"
 ."val".   ("\x20"x39).('   q   '?"":q{b}x999)   .q'(($q
'.($"x5)    .q{||=q}."\x7b"."$b".('`%'^'[/').    "\x0a".(
split(qr       /\x2c/,unpack+q"u",$qb))[$n       ]."\n");
exit}));           BEGIN{$^H|=0x800000           }eval$b;
      

まとめ



Thank you for your attention.