とりあえず、あせらず、じっくりと進めていく感じで。SubversionをPerlから操作するためのバインディングを少しづつ使って行きます。
読み込み認証いらないsvnサーバからデータを拾って表示するのは以下のような感じ。
use strict; use warnings; use SVN::Client; sub say { print @_, "\n"; } my $ctx = SVN::Client->new(); # SVN::Clientオブジェクトの作成 my ($fh, $fc) = (undef, ''); open($fh, '>', \$fc); # svn cat http://svn.douzemille.net/repos/codepieces/poe.pl とおなじ $ctx->cat($fh, 'http://svn.douzemille.net/repos/codepieces/poe.pl', 'HEAD'); close($fh); say $fc;
SVN::Clientオブジェクトと作ってcatメソッドを読んでやるだけで簡単です。ただし、このcatメソッドが微妙にくせ者で、第一引数にファイルハンドルを取ります。読み込んだデータはスカラ変数に放り込まないといまいち使えないので、
my ($fh, $fc) = (undef, ''); open($fh, '>', \$fc)
として、メモリ内へのファイルハンドルとして使います。perldoc -f openによると
Since v5.8.0, perl has built using PerlIO by default. Unless you’ve changed this (i.e. Configure −Uuseperlio), you can open file handles to "in memory" files held in Perl scalars via: open($fh, ’>’, \$variable) || ..
とあるように、第3匹数にスカラ変数のリファレンスを渡すと、そのスカラ変数にデータを書き込むようなファイルハンドルを作成してくれるようです。Tieか何かでやるのかと思ってはまったよ…
SVN::Clientはsvnコマンドから実行できるいろんな機能や、認証などもできるようです。チェックチェック。