Yacafiの動作を読み解く3
http://d.hatena.ne.jp/hao_yayoi/20100827/1282843571:titlle=Yacafiの動作を読み解く2より引き続き
86 〜 95行目
86 $yacafi =~ s/### NO PACK\n.+?### NO PACK END\n//sg; 87 $yacafi =~ s/\n__END__\n.+$//s; 88 $yacafi =~ s/'\.\$CURRENT_CLASS\.'/$CURRENT_CLASS/g; 89 $yacafi =~ s/\$CURRENT_CLASS/$CURRENT_CLASS/g; 90 91 my $global = ''; 92 for my $code ( $yacafi =~ /### GLOBAL\n(.+?)### GLOBAL END\n/sg ) { 93 $global .= $code; 94 } 95 $yacafi =~ s/### GLOBAL\n(.+?)### GLOBAL END\n//sg;
引き続きYacafi.pmのソースコードを置換する処理。Yacafi.pmの中身の殆どがメタプログラミングのためのものというのがよくわかる。
97 〜 104 行目
97 my $cgi = _read_file( ( caller(1) )[1] ); 98 $cgi =~ s/use (?:Yacafi|strict|warnings).*?;\n//sg; 99 $cgi =~ s/\$Yacafi::/\$/g; 100 101 my $shebang; 102 if ( $cgi =~ s/(\#\![^\n]+)//s ) { 103 $shebang = $1; 104 }
今度は、use Yacafiで実際に書いていたソースコードを対象にした置換作業。98行目でuseしてた行を消し、99行目でYacafiのグローバル変数名から名前空間部分を消す。102行目にてシェバン(UNIXのスクリプトの#!から始まる1行目)があればそれを変数に保持。
次はtemplate_builderなんだけど、多分これが一番手が込んでる感じなので、とりあえずここまで。