Source Filters in @INC
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 でもうごくね!
なんか違うのかな。。。