ぼちぼちやってます。
うーむ、File::Slurp の read_file() でSTDINから読み込むことができない (オープンエラーになる)。 perldoc File::Slurp で見た限りではできそうな気がするんだけどなあ。
pod2htmlを使ってeuc-jpで記述したpodをhtml変換すると
ので、head2の直後の文字列は英語のままにしてその日本語訳を後続の行に置いて、 item のエントリは訳文の後ろにカッコでくくってもとの文をつけるように しておいてから、pod2htmlで変換後に↓のようなスクリプトで調整するように した。ファイルを一気読みしてるけど、大きくても数百キロバイトのオーダーだから 問題ないだろう。多分。あとwhile()ループで、置換が行われるたびに 文字列(=ファイル内容)の先頭からマッチしなおすのが気に入らないけど これもそんなに酷使するスクリプトでもないから見逃すことにしよう。
use strict;
my $head = qr{(<h2><a name=".*">)(.*)(</a></h2>\n)<p>(.*)</p>};
my %cnv = {};
sub escape() {
my $str = shift;
$str =~ s/[ \']/_/g;
$str = lc($str);
return $str;
}
undef $/;
my $contents = <>;
while ($contents =~ s/$head/$1$4$3/) {
my $replace = $4;
my $entrystr = $2;
$cnv{$entrystr} = $replace;
}
foreach my $entry (keys %cnv) {
$contents =~ s{<li><a href=(".*")>\Q$entry\E</a></li>}{<li><a href=$1>$cnv{$entry}</a></li>};
}
$contents =~ s/"item_.+">(.+)\((.+)\)/'"item_' . &escape($2) . '">' . "$1($2)" /ge;
$contents =~ s{<head>}
{<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp" />
<meta http-equiv="Content-Language" content="ja" />
}x;
print $contents;
use encoding しているとき、例えば外部ファイルから 読み込んできたなどした内部コードに変換されていないデータに対して chompすると、 chompされたデータは内部コードに自動的に変換される。
If the "encoding" pragma is in scope then the lengths returned
are calculated from the length of $/ in Unicode characters,
which is not always the same as the length of $/ in the native
encoding.
↓openプラグマで対処できるみたい。
use encoding 'sjis';
use open IN=>':encoding(sjis)';
#binmode(STDIN, ':encoding(euc-jp)');
while (<>) {
s/漢字/世界/;
print $_;
}
ふむ。ARGV経由で取ってきたストリームにはuse encodingが 効いていなかったのか。
C:\home\work>cat argv.pl
use encoding shiftjis;
while (<>) {
s/\\/./;
print $_;
}
C:\home\work>cat b.txt
一覧表
予定
C:\home\work>perl argv.pl b.txt
一覧.
.定
C:\home\work>cat b.txt | perl argv.pl
一覧表
予定
なんかpod2htmlがうまく動かないんですが。encoding.pmを訳し終わったのに 変換すると結果が文字化けして(エラーも出ている)ダメ。元ドキュメントをsjisに してもeuc-jpにしてもutf8にしてもダメ。誰か助けて~
メールの宛先はこちら