■
perl の system 関数は内部で sh を呼び出し,sh が処理を行っているようなので,Windows とかで簡単なスクリプトを組もうとした場合,ファイル名にスペース" " や,括弧 "(",")" があったり,SJISの漢字内に "`" が含まれていたりすると,sh 自身の特殊文字と思われて上手く処理できない場合がある.
UNIX とかだとそれらの文字を利用すること自体少ないので問題はないが,Windows だと当たり前のようにそれらの文字が名前として利用されるので,perl としてもそれらの文字列を含むファイル名を利用する場合の対処,などが書かれた記述等が少なかったりもする.
しかしながら,
rename(from,to);
関数などは,上記の文字列であっても処理できるので,この関数を用いれば対処が可能だ.
例: zip ファイルを解凍
my $fname = "(コミック) 日本語のファイル.zip";
my $tmp = "comic.zip";
rename($fname,$tmp);
system("unzip $tmp");
rename($tmp,$fname);
このような処理を,たとえば *.zip のように拡張子ごとに処理したい場合などに利用すれば日本語文字列のファイルでも自由に処理を行うことができる.