むしゃくしゃしてやった。後悔はしてないけど公開はした。
Install
Yosemite DP3 + Xcode6-beta3 で動きます。
% git clone https://github.com/dankogai/swift-perl.git
% open swift-perl/swiftperl.xcodeproj
あとはmain.swiftを適当にいじって遊んでね。
Synopsis
こんな感じで使えます
Perl.sysInit()
func run(script:String) {
let pl = Perl()
let sv = pl.eval(script)
println("eval \"\(script)\"")
if !pl.evalok {
println(" err: \(pl.errstr)")
} else {
println(" !!: \(sv.asBool)")
println(" int: \(sv.asInt)")
println(" +0.0: \(sv.asDouble)")
println(" q{}.: \(sv.asString)")
}
}
run("reverse q(rekcaH lreP rehtonA tsuJ)")
run("atan2(0,-1)")
run("q{0 but true}")
run("my @a = (0,1,2,3)")
run("my %h = (zero => 0, one => 1)")
run("sub{ @_ }")
run("phpinfo()")
let pl = Perl()
pl.eval("our $swift = q(0.0 but rocks)")
println(pl.$("swift"))
println(pl.$("swift")?.asBool)
println(pl.$("swift")?.asDouble)
println(pl.$("objC"))
pl.eval("use Data::Dumper")
println(pl.eval("Dumper(\\%ENV)"))
Perl.sysTerm()
Making thereof
コード部分は楽勝でした。
に素直に従っただけ。むしろ大変だったのはXcodeの設定の方ですが、これも基本的にサーチパスとリンカーオプションを perlembed に従って設定するだけでした。
「PerlでJavaScript」のJavaScriptCoreを使った事例と異なり、現状ではシングルインスタンスです。一応initとdeinitは繰り返しできるようにはしているので、スコープごとにcontextは新鮮にはなります。
なお、ここで利用しているPerlは、Yosemite DP3付属のものです。実際に組み込んで利用する場合はPerl自体をプロジェクトに同封するなりするようにした方がいいと思います。
これでYAPC::Asia::2014のトークもばっちこい…ん、まてよ、まだ採択されたと決まったわけじゃないよな。というわけで、動くの見たいかたはソーシャルメディアで(リツイート|いいね|ブクマ)などして下さると幸いです。
Enjoy!
Dan the Swift Perl Hacker