作者: 藤岡和夫
日時: 2008/1/13(01:24)
On Sat, 12 Jan 2008 23:43:52 +0900 (JST)
geg01137@... (林 宏) さんwrote:

> ご無沙汰してます。
> 
> Microsoft Windows Xp Professional 2002  Service Pack 2
> Activeperl 5.8.8_build820
> スクリプトを shift-jisで書いてます。
> perl/tk でファイル(ディレクトリ)を読込んで
> chdir($drc) しようと思うのですが、ディレクトリに日本語が
> 入っていると、ディレクトリに移動したり、ファイルが読込めません。

5.8では、chdirは、データを元のバイト列のまま取り扱うようになっていると思
います。

従って、例えば、次の様なスクリプトをSJISで書いて、use encoding 'shiftjis';
を付けると動きません。付けなければ、この場合は動きます。なぜなら、SJISの
文字列部分が"\"を含まないからです。

-----
$dir = "C:/Documents and Settings/藤岡和夫";
chdir($dir);
opendir(DIR, $dir) || die "can't opendir $dir: $!";
    @files = grep {-f "$dir/$_" } readdir(DIR);
closedir DIR;
print $dir,":",join(" ",@files);
-----

スクリプトはUTF-8で書いて、ディレクトリ名は必要であれば、スクリプト外部
からSJISのまま読み込むか、スクリプト内部ならUTF-8をSJISに変換して、さら
に\をエスケープして渡すようなことをする必要があるでしょう。そのような面
倒なことをするなら、SJISのディレクトリ名は使わない方が賢明ということにな
るでしょうね。

use encoding 'shiftjis'は使えると考えないほうが幸せになれます。SJISがど
うしても使いたいなら、jperlを使うべきです。でも、Tkはそういうわけにはい
きませんね^^;)

文字コードの問題は、複数の文字コードが共存する日本語では避けては通れない
ので、ややこしいですね。

藤岡 和夫
kazuf@...
日曜プログラマのひとりごと http://homepage1.nifty.com/kazuf/renewal.html