perl5.8.9 から入ったという、@INC のなかに coderef ぶっこんどいて、ソースフィルタするという機能。
をためしてみる。
package OreOreFilter;
use strict;
use warnings;
use File::Spec;
sub import {
unshift @INC, new OreOreFilter();
}
sub new { bless {}, shift }
sub OreOreFilter::INC {
my ($self, $fname) = @_;
for my $inc (@INC) {
next if ref $inc;
my $real = File::Spec->catfile($inc, $fname);
next unless -f $real;
open my $fh, '<', $real or die $!;
return ($fh, sub {
$_ =~ s/hello/hi/;
$_ ? 1 : 0;
});
}
return;
}
1;
package Foo;
sub foo { print "hello\n" }
1;
% ./perl -I. -e 'use OreOreFilter; require Foo; Foo->foo'
hi
で、これでいいのかなーとおもったんだけど、これ perl5.8.8 でもうごくね!
なんか違うのかな。。。