某ホスティングサイト上でシステムの開発をしているんだが、そのサーバには許せないことに、Perl モジュールの Jcode.pm が入っていない。
root 権限もくれないので、普通に make 出来ないし。
なので、展開したファイルを手動でコピーして使ってたんだが、それだと UTF-8 の変換で問題があるんだよねえ。
その辺の原因を追及する時間がもったいなかったので、IN/OUT のデータも、Perl のソースも全て UTF-8 にして、変換が必要ないようにしてたんだけど、どうしてもメール送信しなくちゃいけなくなって。
メールも Unicode のままでも良いんだけど、俺の使ってる AL-Mail が Unicode のメールが読めないんでねえ。(笑)
ということで、Jcode.pm を使って変換することにしたんだけど、いやぁ、ハマった、ハマった。(^^;
変換時にエラーが出る対応で、Jcode/_Classic.pm を修正しちゃったもんだから(「Unicode 変換時の Jcode のエラー」に書いたように、これは誤った対処方法)、その後、エラーが出ないのに、何で正しく UTF-8 がらみの変換が出来ないのか悩むことに・・・(^^;
これで、丸一日無駄にしちゃった。(^^;
最後には、nkf 使って、
my $str = join '', @_;
my $tmp = (time) . $$ . '.txt';
open(NKF, ">$tmp");
print NKF $str;
close(NKF);
$str = `cat $tmp|/usr/local/bin/nkf -j`;
unlink $tmp;
return($str);
みたいな関数作って対応してたんだけど、さすがに美しくないので・・・(^^;
結局、ユーザ環境に Jcode.pm を make install することにした。
でOK。
make install の時に、(一般ユーザの書込権限の無いディレクトリに書き込もうとするので)perllocal.pod のインストールで失敗するが、Jcode.pm の実行には影響無い。
もちろん、perllocal.pod をユーザ環境にインストールするよう設定出来るが、ま、インストールしなくても困んないので、今回はこれでヨシ。
これで、Jcode/Unicode.pm が作られるので、「Unicode 変換時の Jcode のエラー」に書いたように、Jcode/Unicode/NoXS.pm を修正する必要は無い。
この時に、必ず @INC に含まれるディレクトリをインストール先にすること。(でないと、Perl スクリプトの頭で、いちいちインストール先を @INC に加える処理が必要になるけえ)
なので、俺は、cgi-bin の直下にインストールした。(. ディレクトリは @INC に含まれているからね)
ああ。root 権限くれるホスティングサービスだったら、こんな苦労しなくていいのにな。
Perl で作った独自システムを動かしたい会社は、月々数千円の金を惜しまず、WebARENA とか使えばええのだ。いや、マジで。
Tweet
root 権限もくれないので、普通に make 出来ないし。
なので、展開したファイルを手動でコピーして使ってたんだが、それだと UTF-8 の変換で問題があるんだよねえ。
その辺の原因を追及する時間がもったいなかったので、IN/OUT のデータも、Perl のソースも全て UTF-8 にして、変換が必要ないようにしてたんだけど、どうしてもメール送信しなくちゃいけなくなって。
メールも Unicode のままでも良いんだけど、俺の使ってる AL-Mail が Unicode のメールが読めないんでねえ。(笑)
ということで、Jcode.pm を使って変換することにしたんだけど、いやぁ、ハマった、ハマった。(^^;
変換時にエラーが出る対応で、Jcode/_Classic.pm を修正しちゃったもんだから(「Unicode 変換時の Jcode のエラー」に書いたように、これは誤った対処方法)、その後、エラーが出ないのに、何で正しく UTF-8 がらみの変換が出来ないのか悩むことに・・・(^^;
これで、丸一日無駄にしちゃった。(^^;
最後には、nkf 使って、
my $str = join '', @_;
my $tmp = (time) . $$ . '.txt';
open(NKF, ">$tmp");
print NKF $str;
close(NKF);
$str = `cat $tmp|/usr/local/bin/nkf -j`;
unlink $tmp;
return($str);
みたいな関数作って対応してたんだけど、さすがに美しくないので・・・(^^;
結局、ユーザ環境に Jcode.pm を make install することにした。
% perl Makefile.PL INSTALLDIRS=site INSTALLSITELIB=/usr/home/hoge/www/cgi-bin
% make
% make install
でOK。
make install の時に、(一般ユーザの書込権限の無いディレクトリに書き込もうとするので)perllocal.pod のインストールで失敗するが、Jcode.pm の実行には影響無い。
もちろん、perllocal.pod をユーザ環境にインストールするよう設定出来るが、ま、インストールしなくても困んないので、今回はこれでヨシ。
これで、Jcode/Unicode.pm が作られるので、「Unicode 変換時の Jcode のエラー」に書いたように、Jcode/Unicode/NoXS.pm を修正する必要は無い。
この時に、必ず @INC に含まれるディレクトリをインストール先にすること。(でないと、Perl スクリプトの頭で、いちいちインストール先を @INC に加える処理が必要になるけえ)
なので、俺は、cgi-bin の直下にインストールした。(. ディレクトリは @INC に含まれているからね)
ああ。root 権限くれるホスティングサービスだったら、こんな苦労しなくていいのにな。
Perl で作った独自システムを動かしたい会社は、月々数千円の金を惜しまず、WebARENA とか使えばええのだ。いや、マジで。
コメントする