@kyanny's blog

創造性は記憶によるところが大きい - 黒澤明

BOM があるファイルを見つけるスクリプト

結局こんなんになりました。BOM を取るのもやろうとおもっていたけど、もたもたスクリプトをかいてるあいだにエディタで再保存までやってもらっちゃってそこ不要になってしまったので、チェッカーのみで。 pack とか unpack とかいつまでたっても上手に使えるようになる気がしない。

#!/usr/local/bin/perl
# $Id$
use strict;
use File::Find;
use IO::File;

my @dir = shift || ".";

find(sub {
         if (-f $_) {
             my $fh = IO::File->new;
             $fh->open($_);
             my $str = do { local $/; <$fh>; };
             if (is_bomed($str)) {
                 print "$File::Find::name is BOMed!\n";
             }
             $fh->close;
         }
}, @dir);

sub is_bomed {
    my $str = shift;
    my $hexstr =  unpack("H*", $str);
    return $hexstr =~ /^efbbbf/;
}

__END__

=encoding utf-8

=for stopwords

=head1 NAME

bom.pl - BOM つきファイルをリストアップするスクリプト

=head1 SYNOPSIS

./bom.pl /path/to/tmpl/dir

=head1 DESCRIPTION

=head1 AUTHOR

Kensuke Kaneko E<lt>k-kaneko@livedoor.jpE<gt>

=head1 LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

=head1 SEE ALSO

=cut