# This file is encoded in INFORMIX V6 ALS. die "This file is not encoded in INFORMIX V6 ALS.\n" if q{あ} ne "\x82\xa0"; use Char::INFORMIXV6ALS; print "1..2\n"; my $__FILE__ = __FILE__; if ($^O !~ /\A (?: MSWin32 | NetWare | symbian | dos ) \z/oxms) { print "ok - 1 # SKIP $^X $__FILE__\n"; print "ok - 2 # SKIP $^X $__FILE__\n"; exit; } $| = 1; mkdir('dt',0777); mkdir('dt/alphabet',0777); mkdir('dt/日本語',0777); open(FILE,">dt/alphabet/alpha.txt") || die "Can't open file: dt/alphabet/alpha.txt\n"; print FILE <<'END'; aaa bbb ccc ddd eee END close(FILE); open(FILE,">dt/日本語/alpha.txt") || die "Can't open file: dt/日本語/alpha.txt\n"; print FILE <<'END'; aaa bbb ccc ddd eee END close(FILE); open(FILE,">dt/alphabet/sjis.txt") || die "Can't open file: dt/alphabet/sjis.txt\n"; print FILE <<'END'; aaa あああ bbb いいい ccc ううう ddd 表 eee END close(FILE); open(FILE,">dt/日本語/sjis.txt") || die "Can't open file: dt/日本語/sjis.txt\n"; print FILE <<'END'; aaa あああ bbb いいい ccc ううう ddd 表 eee END close(FILE); my $aaa = <<'END'; !!dt/alphabet!! !!dt/alphabet/alpha.txt!! dt/alphabet/alpha.txt:aaa !!dt/alphabet/sjis.txt!! dt/alphabet/sjis.txt:aaa !!dt/日本語!! !!dt/日本語/alpha.txt!! dt/日本語/alpha.txt:aaa !!dt/日本語/sjis.txt!! dt/日本語/sjis.txt:aaa END my $hyou = <<'END'; !!dt/alphabet!! !!dt/alphabet/alpha.txt!! !!dt/alphabet/sjis.txt!! dt/alphabet/sjis.txt:表 !!dt/日本語!! !!dt/日本語/alpha.txt!! !!dt/日本語/sjis.txt!! dt/日本語/sjis.txt:表 END open(FILE,">01grepdir.pl") || die "Can't open file: 01grepdir.pl\n"; print FILE ; close(FILE); $_ = `$^X 01grepdir.pl aaa dt 2>NUL`; sleep 1; if ($_ eq $aaa) { print "ok - 1 $^X $__FILE__ aaa dt \n"; } else { print "not ok - 1 $^X $__FILE__ aaa dt \n"; print "($_)\n"; print "($aaa)\n"; } $_ = `$^X 01grepdir.pl 表 dt 2>NUL`; sleep 1; if ($_ eq $hyou) { print "ok - 2 $^X $__FILE__ 表 dt\n"; } else { print "not ok - 2 $^X $__FILE__ 表 dt\n"; print "($_)\n"; print "($hyou)\n"; } sleep 1; unlink('01grepdir.pl'); unlink('01grepdir.pl.e'); unlink('dt/alphabet/alpha.txt'); unlink('dt/alphabet/sjis.txt'); unlink('dt/日本語/alpha.txt'); unlink('dt/日本語/sjis.txt'); rmdir('dt/alphabet'); rmdir('dt/日本語'); rmdir('dt'); __END__ # This file is encoded in INFORMIX V6 ALS. die "This file is not encoded in INFORMIX V6 ALS.\n" if q{あ} ne "\x82\xa0"; use Char::INFORMIXV6ALS; local $^W = 1; if (@ARGV < 2) { die <) { chomp; # 修正箇所1 # print "$file:$_\n" if (/$pat/); print "$file:$_\n" if (/\Q$pat\E/); } } __END__ WindowsでPerl 5.8/5.10を使うモンじゃない の「ここで紹介したスクリプトのサンプル」の grepdir.pl を利用しています。 例: 正規表現を指定して,指定したディレクトリ配下のファイルから取り出すコードを書いてる。 コマンド形式: perl grepdir.pl {パターン} {ディレクトリ} 次のようなテスト環境を用意する。 C:\TEMP\TP> tree /F dt フォルダ パスの一覧: ボリューム vvvvv_vvvvvvvvv ボリューム シリアル番号は vvvv-ssss です C:\TEMP\TP\DT ├─alphabet │ alpha.txt │ sjis.txt │ └─日本語 alpha.txt sjis.txt これを perl にて実行させると,次のようになる。 C:\TEMP\TP\DT>perl grepdir.pl aaa dt !!dt/alphabet!! !!dt/alphabet/alpha.txt!! dt/alphabet/alpha.txt:aaa !!dt/alphabet/sjis.txt!! dt/alphabet/sjis.txt:aaa !!dt/日本語!! !!dt/日本語/alpha.txt!! dt/日本語/alpha.txt:aaa !!dt/日本語/sjis.txt!! dt/日本語/sjis.txt:aaa C:\TEMP\TP\DT>perl grepdir.pl 表 dt !!dt/alphabet!! !!dt/alphabet/alpha.txt!! !!dt/alphabet/sjis.txt!! dt/alphabet/sjis.txt:表 !!dt/日本語!! !!dt/日本語/alpha.txt!! !!dt/日本語/sjis.txt!! dt/日本語/sjis.txt:表 直さなければならないところは,以下のようなところになる。 修正箇所1 正規表現内に変数を記述し、変数に格納されている内容そのものにマッチ させたいのであれば \Q ... \E で囲む必要がある。 ---------------------------------------------- print "$file:$_\n" if (/$pat/); ---------------------------------------------- ↓ 書き換え ---------------------------------------------- print "$file:$_\n" if (/\Q$pat\E/); ---------------------------------------------- 以上