The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
# encoding: Big5Plus
# This file is encoded in Big5Plus.
die "This file is not encoded in Big5Plus.\n" if q{‚ } ne "\x82\xa0";

use Char;
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

my $script = __FILE__ . '.pl';

open(FILE,">$script") || die "Can't open file: $script\n";
print FILE <DATA>;
close(FILE);

if (($ENV{'PERL5SHELL'}||$ENV{'COMSPEC'}) =~ / \\COMMAND\.COM \z/oxmsi) {
    $_ = `$^X $script aaa dt`;
}
else {
    $_ = `$^X $script 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";
}

if (($ENV{'PERL5SHELL'}||$ENV{'COMSPEC'}) =~ / \\COMMAND\.COM \z/oxmsi) {
    $_ = `$^X $script •\ dt`;
}
else {
    $_ = `$^X $script •\ 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($script);
unlink("$script.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__
# encoding: Big5Plus
# This file is encoded in ShiftJIS.
die "This file is not encoded in ShiftJIS.\n" if q{‚ } ne "\x82\xa0";

use Char;

local $^W = 1;

if (@ARGV < 2) {
    die <<END;
ŽÀs•û–@:

perl $0 aaa dt
perl $0 •\  dt
END
}

&grepdir(@ARGV);

exit 0;

sub grepdir ($$) {
    my($pat,$dir) = @_;
    my($node);

    opendir(D,$dir);
    my @nodes = grep (!/^\./, readdir(D));
    closedir(D);

    foreach $node (@nodes) {
        my $path="$dir/$node";
        print "!!$path!!\n";
        if ( -f $path ) {
            grepfile($pat,$path);
        }
        elsif( -d $path) {
            &grepdir($pat,$path);
        }
        else {
            print STDERR "skip:$path\n";
        }
    }
}

sub grepfile ($$) {
    my($pat,$file) = @_;
    open(IN,$file) or die "Error:open($file):$!\n";
    while (<IN>) {
        chomp;

# C³‰ÓŠ1
#       print "$file:$_\n" if (/$pat/);
        print "$file:$_\n" if (/\Q$pat\E/);
    }
}

__END__

Windows‚ÅPerl 5.8/5.10‚ðŽg‚¤ƒ‚ƒ“‚¶‚á‚È‚¢

‚́u‚±‚±‚ŏЉ‚½ƒXƒNƒŠƒvƒg‚̃Tƒ“ƒvƒ‹v‚Ì grepdir.pl ‚ð—˜—p‚µ‚Ä‚¢‚Ü‚·B

—á: ³‹K•\Œ»‚ðŽw’肵‚āCŽw’肵‚½ƒfƒBƒŒƒNƒgƒŠ”z‰º‚̃tƒ@ƒCƒ‹‚©‚çŽæ‚èo‚·ƒR[ƒh‚ð‘‚¢‚Ä‚éB

ƒRƒ}ƒ“ƒhŒ`Ž®: perl grepdir.pl {ƒpƒ^[ƒ“} {ƒfƒBƒŒƒNƒgƒŠ}

ŽŸ‚̂悤‚ȃeƒXƒgŠÂ‹«‚ð—pˆÓ‚·‚éB

C:\TEMP\TP> tree /F dt
ƒtƒHƒ‹ƒ_ ƒpƒX‚̈ꗗ: ƒ{ƒŠƒ…[ƒ€ vvvvv_vvvvvvvvv
ƒ{ƒŠƒ…[ƒ€ ƒVƒŠƒAƒ‹”ԍ†‚Í vvvv-ssss ‚Å‚·
C:\TEMP\TP\DT
„¥„Ÿalphabet
„       alpha.txt
„       sjis.txt
„ 
„¤„Ÿ“ú–{Œê
       alpha.txt
       sjis.txt

‚±‚ê‚ð perl ‚É‚ÄŽÀs‚³‚¹‚é‚ƁCŽŸ‚̂悤‚É‚È‚éB

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:•\

’¼‚³‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Æ‚±‚ë‚́CˆÈ‰º‚̂悤‚È‚Æ‚±‚ë‚É‚È‚éB

C³‰ÓŠ1
  ³‹K•\Œ»“à‚ɕϐ”‚ð‹Lq‚µA•Ï”‚ÉŠi”[‚³‚ê‚Ä‚¢‚é“à—e‚»‚Ì‚à‚̂Ƀ}ƒbƒ`
  ‚³‚¹‚½‚¢‚Ì‚Å‚ ‚ê‚Î \Q ... \E ‚ň͂ޕK—v‚ª‚ ‚éB

    ----------------------------------------------
    print "$file:$_\n" if (/$pat/);
    ----------------------------------------------
                « ‘‚«Š·‚¦
    ----------------------------------------------
    print "$file:$_\n" if (/\Q$pat\E/);
    ----------------------------------------------

ˆÈã