極悪です。
[TSperl:470] Re: Perlクックブック第二版 に書いた
ごみスクリプトをもっと汎用的に使えるようにしました。
遊びで、ちょっとわかりにくく書いてます。
use strict;
use encoding "sjis";
my %seen;
my $bit = 2**$#ARGV;
sub see{
my $file = shift or die;
my $func = shift || sub{};
open(FILE,"<:encoding(sjis)",$file) or die;
local $_;
while(<FILE>){
chomp;
$func->($_);
$seen{$_} |= $bit;
}
close FILE;
$bit >>= 1;
}
foreach(@ARGV){
see($_,sub{ s/[\t\s]+/ /g });
}
my @prefix;
foreach(0..2**@ARGV){
$prefix[$_] = sprintf("%0@{[@ARGV+0]}b",$_);
my $i = 0;
$prefix[$_] =~ s/./("_",++$i)[$&]/ge;
}
my %count;
foreach(sort keys %seen){
print "$prefix[$seen{$_}]: $_\n";
}
使い方は perl hoge.pl file1 file2 file3 file4 ...
ってな具合で、file1〜file4 全てに現れる行は 1234、
file1 だけに現れる行は 1___ などと表示します。
使い道がないのが難。これの diff 版があるといいんだけど
(どこかにありそう?)。
D:% perl hoge.pl C:Perl400\lib\strict.pm C:Perl500\lib\strict.pm C:Perl600\lib\strict.pm C:Perl800\lib\strict.pm |grep -v "1234:" |head -20
123_: $SIG{PIPE} = "Plumber"; # just fine: bareword in curlies always ok
___4: $SIG{PIPE} = "Plumber"; # just fine: quoted string is always ok
___4: $^H &= ~ (@_ ? bits(@_) : $default_bits);
123_: $^H &= ~ bits(@_ ? @_ : qw(refs subs vars));
___4: $^H |= @_ ? bits(@_) : $default_bits;
123_: $^H |= bits(@_ ? @_ : qw(refs subs vars));
__34: $bar = \&{'foo'};
___4: $bits |= $bitmask{$s} || 0;
__34: $file = "STDOUT";
__34: &$bar;
___4: Carp::croak("Unknown 'strict' tag(s) '@wrong'");
___4: Unknown 'strict' tag(s) '...'
___4: foreach my $s (@_) {
123_: foreach my $s (@_){ $bits |= $bitmask{$s} || 0; };
___4: if (@wrong) {
___4: my @wrong;
__34: our $bar; # Declares $bar in current package
__34: print $file "Hi!"; # error; note: no comma after $file
___4: push @wrong, $s unless exists $bitmask{$s};
___4: require Carp;
D:%
--
極悪, FZH01112 at nifty.com
http://hpcgi1.nifty.com/dune/gwiki.pl?