この下の方のコメント機能のプログラムで
一つ分かったら次にまた問題が!・・・と言う具合でまだまだ悪戦苦闘中だが、少ないながらも得られた知識をメモとして。
Localサーバーと Webのレンタルサーバーの間を行ったり来たりしながらプログラムの検討をしていると、途中何がなんだか分からなくなることがある。ローカルと Webでは同じ perlで大まかなコマンドの処理は同じでも 例えば perlのバージョンや使用可能なモジュールが異なるため、細かなところでコマンドの動作が異なっていることが多々ある。
今回、2点ほど気づいたのでメモ。
1つ目は、私の環境は Localサーバー(xampp/Apache)は perl 5.30に対して、Webサーバー(Lolipop)は 5.10で、どうやら ver.5.26以降はライブラリの指定の仕方が異なっているようだ。例えば Webサーバーでは同一ディレクトリに置いたサブルーチン用のファイル(xxxx.pm)に対して
use xxxx; とやるだけで認識するのに Local(5.30) の方では予め
use lib qw(./); などと指定しないとと言うような
情報があったが、何故か私の環境では
use lib './xxxx'; などと
相対的なパスを指定しないと認識してくれないみたいだ。
2つ目は文字コードの問題で、通常 use uft8; として 内部処理文字コードを UTF-8で宣言した場合、my $str = "あいうえお漢字"; などとコード中で変数に日本語文字を使った場合、その文字コードには utf-8フラグが付加されるので そのまま
from_to($str, 'utf-8', 'iso-2022-jp'); などのエンコード処理をしようとすると "Wide character" エラーが出て怒られる。対応策は ver. 5.30 では処理のブロック内で no utf8; 宣言して回避するが、どうやら perl 5.10 では no utf8; が効かないようで Localで問題ないコードでも Webで実行すると "Wide character" エラーが出る。仕方ないので内部の日本語文字を含むメールを送信する場合などは
$string = Encode::encode_utf8($str); などとして utf-8フラグを削除してから from_to()コマンドを使うしかなさそうだ。