旧仕様プラグインの対応のヒント - PrefKarafuto/ex0ch GitHub Wiki

プラグインとは?

プラグインとは、ぜろちゃんねる/ぜろちゃんねるプラスに存在する、掲示板機能を拡張する仕組みです。
testフォルダ下のpluginフォルダにプラグインファイル本体を、plugin_confフォルダに各プラグインの設定情報が保存されます。

v0.8.0へのアップデートに伴う対応

v0.7.5まで、ぜろちゃんねるプラスはShift-JISでエンコードされていました。しかしGitHubでの開発にあたっては不便であり、かつ正規表現などを扱う際に手間がかかるという問題が有りました。
そこで、v0.8.0からはエンコードをUTF-8に変更しました^1。これによってperl中の日本語文字列は格段に扱いやすくなりました。

しかし、Shift-JISでエンコードされた大部分のプラグインファイルは、そのまま現バージョンで読み込もうとすると文字化けや文字列操作における意図しない挙動などを引き起こすため、そのままでは使用できません^2。そこで、ユーザ側でのプラグイン書き換えのヒントとなる条項を下に示します。

ヒント

スクリプトの文字コードをUTF-8に変換

メモ帳などでスクリプトファイルを開き、「ファイル→名前をつけて保存」で、文字コードにUTF-8を選択して保存する。

冒頭にutf8プラグマを記述する

package ZPL_xxx;

となっている部分を

package ZPL_xxx;
use utf8;

と書き加える。

(ファイルを読み書きする操作がある場合)冒頭にopenプラグマを記述する

package ZPL_xxx;
use utf8;

package ZPL_xxx;
use utf8;
use open IO=>':encoding(cp932)';

とする。 IOの部分は「IN」で読込、「OUT」で書出をcp932(Shift-JIS)で行う設定である。IOは読み書き両用となる。
UTF-8を指定したい場合、':encoding(cp932)';':utf8';にする。

モジュールファイル名、パッケージ名の書き換え

v0.8.0より、moduleフォルダ内のファイル名及びパッケージ名は、これまで指輪物語のキャラ名だったものから、モジュールの機能を表した適切な名称に変更されている。
そのため、対応表をもとに適宜変換していく必要がある。

binmodeの削除

日本語文字列操作のあるプラグインにおいて

if (open(my $fh, '>>', $path)) {
	flock($fh, 2);
	binmode($fh);
	print $fh join('<>', time, $bbs, $title)."\n";
	close($fh);
}

といった箇所があるとき、binmode($fh);は不具合の元であることが多い。(openでの指定に関わらずUTF-8でファイルが生成される)
必要に応じてコメントアウト等を行うこと^3

プラグインファイル名の変更

0ch_XXX.plとなっているファイル名を0ch_XXX_utf8.plとする。 これによって本体側でプラグインを認識するようになる。