Perl Tech RSSフィード

2011-10-16

Windowsでperl6.exe(2011.09版)をビルドする  Windowsでperl6.exe(2011.09版)をビルドする - Perl Tech を含むブックマーク

Windowsでrakudo 2011.09版のビルドに成功したので、その方法を解説します。perl6を実際に触ってみたい方はぜひどうぞ。(しかし、触る以前に情報が少なすぎるから困る)

用意するもの

perlgccの実行ファイルの場所を環境変数PATHに通しておくこと。

Parrotのビルド

Parrotの圧縮ファイルを展開し、その中のConfigure.plを以下のように実行する。これでC:\parrot\binにparrot.exe等の実行ファイルがインストールされる。

parrot>perl Configure.pl --optimize --prefix="C:/parrot"
parrot>mingw32-make
parrot>mingw32-make install

NQPのビルド

NQPはそのままではエラーが出てビルドできない。まず、NQPの圧縮ファイルを展開したらtools/lib/NQP/Configure.pmのコードを以下のように修正する。

if ($^O eq 'MSWin32') {
    # $text =~ s{/}{\\}g; ここをコメントアウトする

さらにVERSIONというファイルの中身が"2011.05"になっているので、"2011.09-8-ge3d5c8"に変更する。そうしないとrakudoのバージョンチェックに引っかかるので。

そして以下のように実行

nqp>perl Configure.pl --with-parrot="C:/parrot/bin/parrot.exe"

ここでMakefileが出来るが、このMekefileの中身を以下のように修正する。

# PERL          = C:\strawberry\perl\bin\perl.exe
PERL          = C:/strawberry/perl/bin/perl.exe \を/に変更するだけ

そのままビルドするとlibparrot.dllが見つからずエラーになるので、nqpのフォルダにビルドしたlibparrot.dllをコピーしておく。

そしてmake installするとC:\parrot\binにnqp.exeがインストールされる。

nqp>mingw32-make
nqp>mingw32-make install

Rakudoのビルド

rakudoの圧縮ファイルを展開し、libparrot.dllをrakudoのフォルダにコピーしておく。そして以下のように実行すればC:\parrot\binにperl6.exeがインストールされる。あとはC:\parrot\binを環境変数PATHに追加すれば完了。

rakudo>perl Configure.pl --with-nqp="C:/parrot/bin/nqp.exe"
rakudo>mingw32-make
rakudo>mingw32-make install

2011-10-01

Perl6ドキュメントを日本語に翻訳した  Perl6ドキュメントを日本語に翻訳した - Perl Tech を含むブックマーク

Perl6公式ドキュメントの日本語版を作りましたのでお知らせいたします。コリャ英和!というソフトで機械翻訳したので変な訳も多いですが(bless→祝福しろ、die→○ね、とか)・・・まあ意味不明な箇所は原文読め、ということです。

※ OmegaTで人力翻訳していた時期もあったけど、原文の量が多すぎて諦めた

http://damako.net/perl6specs/perl6specs.html

2011-01-02

qw()の変な使い方  qw()の変な使い方 - Perl Tech を含むブックマーク

なんと、以下のコードはきちんと動作します。

foreach my $str qw(a b c d) {
    print $str, "\n";
}

結果

a
b
c
d

perlのパーサーが内部でqw(a b c d)を(qw(a b c d))のように解釈するため、foreachに必須のはずの括弧が省略できてしまうのです。この奇妙な動作はperl5135deltaにあるように5.13以降のperlでは廃止されます。絶対に使わないでください。(個人的には、このままのほうが便利じゃね?と思う・・・)

2011-01-01

メソッド呼び出しのwantarrayはどうなるのか  メソッド呼び出しのwantarrayはどうなるのか - Perl Tech を含むブックマーク

package Called;

sub called {
    my ($class, $arg) = @_;
    printf "$arg: wantarray = %d defined = %d\n", wantarray, wantarray;
    return $class;
}

package main;

sub func {
    $arg = shift;
}

Called->called("void called()");
() = Called->called("() = called()");
Called->called("void ->called->")->called("void ->called->called");
() = Called->called("() = ->called->")->called("() = ->called->called");
func( Called->called("func( called() )") );

出力結果

当たり前だがvoidコンテキストでwantarrayは偽(undef)になる。メソッドのチェーン(->called->called)はスカラーコンテキスト、関数呼び出しではリストコンテキストになる。

void called(): wantarray = 0 defined = 0
() = called(): wantarray = 1 defined = 1
void ->called->: wantarray = 0 defined = 1
void ->called->called: wantarray = 0 defined = 0
() = ->called->: wantarray = 0 defined = 1
() = ->called->called: wantarray = 1 defined = 1
func( called() ): wantarray = 1 defined = 1

2010-12-19

GUIとガベージコレクションの組み合わせは難しい  GUIとガベージコレクションの組み合わせは難しい - Perl Tech を含むブックマーク

GUIプログラムのガベージコレクションは厄介ですね。GUIパーツの解放をGCに任せる方がいいのか、それともプログラマーが手動で行う方がいいのか。GUI上では必要なものが勝手に解放されたら困るし・・・さらにperlのリファレンスカウントやweak referenceが絡んでくると大変なことになりそう。

C#Javaでも似たような話題が出ているので、それをマネすればいいのかな?

SOS団がCPANモジュールを公開してるんだが  SOS団がCPANモジュールを公開してるんだが - Perl Tech を含むブックマーク

http://search.cpan.org/dist/FLTK/