ルモーリン

WindowsとCentOSで両用できるPerlの書き方

投稿:2018-07-09、更新:2019-02-21

WindowsでPerlを使おうとして(例えばActivePerl)、ブログとかのLinux下のPerlスクリプトをコピペして爆死、原因を調べようにもWindows下との違いを書いたブログなどを見つけられずに玉砕されている人達が結構いらっしゃるようなので。
今時のPerlなら、スクリプトの頭はこんな感じですよね。 ファイルの文字コードはBOMなしのUTF-8です。 改行コードは愛用のエディタに合わせておけば良いと思います。 私はVimを使っているので設定次第ですからLinux風に0x0aにしています。 なおメモ帳で開くと改行してくれません(笑)。
#!/usr/local/bin/perl -w

use utf8;
use strict;
use warnings;
use Encode;
実行時の環境に合わせ、端末とプログラムの文字コードを変換してくれます。 ちなみにプログラムが扱う文字コードは「謎の文字コードX」だと思ってください。 ブログとか知恵袋で「Perlの内部はUTF-8」などと言うのを真に受けると爆死します(笑)。 2018-07-17 encodeをencodingに修正しました。 2019-02-21 ソースファイルのパスに漢字があるとフリーズするケースがあるので「binmode STDERR, ":encoding(console_out)";」を削除しました。
use Encode::Locale;
binmode STDIN, ":encoding(console_in)";
binmode STDOUT, ":encoding(console_out)";
引数も環境に合わせて変換してくれます。
use Encode::Argv;
文字コードをUTF-8で統一します。 あれ、改行コードどうだっけ?
use open IO => ":utf8";
Windows下のPerlはファイル名の文字コードをcp932(マイクロソフトのシフトJISっぽい奴)で扱います。 UNICODEにしかない漢字を使ったファイル名を開けません。
my $filename = "漢字入りファイル名.txt";
if (open my $fh, ">", Encode::encode locale_fs => $filename) {
	print $fh "ファイルの中に\n";
	print $fh "漢字が入るよ♪\n";
	close $fh;
}