■2004-07-23
* [雑感] ついにこうさぎがFSWikiに
何か書こうとしてくれました。実際にはWikiには書き込まれていないのですが、ログをみると以下のとおり。
[Perl] Acme::ProgressBar(こうさぎ) きょうTamaがblogしたよ♪
*このエントリは、こうさぎの「Tama」が書きました。
これ、FSWikiだと<a>が使えないですね。なぜ書き込まれていないのかは謎。
* [Perl] WindowsでCPANモジュールをmakeしてみる
今さらながらVisual C++ Toolkit 2003をインストールしてみました。試しにCPANモジュールをmakeということで、まずはStorable.pm。Active Perl 5.8.3までに付属のStorableは、マルチスレッドで利用の場合に不具合が発生します。そのため、Thread::Tieなどでperlがクラッシュしたわけですが、最新版では大丈夫なはずなので早速コンパイル。Active Perlの5.8.3で使ったところ、今度はクラッシュしません(5.8ではクラッシュしましたが、たぶん5.8.1からら大丈夫だと思います)。ただし、Thread::TieはそのままではThread::Tie::Threadがデッドロックしたりと問題があるので改造が必要です(気が向いたらithreadsメモに書きます)。
あともう一つはPAR。以前このサイトでもとりあげたPARですが、いやな日記(2004-07-16)によりますとthreadsと併用するとクラッシュするとあります。
で、こちらで同様の問題が指摘されていて、レスをみると最新のものを一からコンパイルすると良いとありました。早速makeしてみます。parl.exeとparldyn.exeができてテストも通るのですが、ppを使って生成した実行ファイルを起動すると、うんともすんともいわず、ひたすらメモリを喰っていきます。失敗ですか。
追記:上記は間違いでした。threadsをuseできるだけですね。5.8.3でコンパイルして試しましたがスレッドをcreateするとやっぱり落ちました。
* [Perl] PARとマルチスレッド(threads)
とりあえず、ppで実行ファイル化してもクラッシュしないthreads利用アプリの作りかたを考えてみました。
#-- thr.pl package thr; use attributes; sub new{ threads->new( @_ ); } 1; #-- test.pl $| = 1; use warnings; use strict; use threads; use threads::shared; main(); sub main{ require 'thr.pl'; my $var : shared = 1; thr::new(sub{print "$var\n";$var++;})->join; thr::new(sub{print "$var\n";$var++;})->join; print "ok $var\n"; } >pp -a "thr.pl" test.pl
これでいけました。
* [Perl] Visual C++ Toolkit 2003でCPANモジュールをmake
Active Perl使っている人でVC++持っていない方向け。Visual C++ Toolkit 2003の導入に関してはここの方の説明がすっきりまとまっていらっしゃいます。
あとはCPANモジュールをmake(nmake)するためにCore SDKの他にMDAC SDKをいれるとよいでしょう(odbc32.libなどが必要な場合があるので)。それから、(デフォルトで入れた場合の)〜\Microsoft Visual Studio .NET 2003\Vc7\lib\msvcrt.libを〜\Microsoft Visual C++ Toolkit 2003\libにコピーするとよいかも。