use strict;
use warnings;
require PerlIO::scalar;
unshift @INC, sub {
my $file = $_[1];
if (ref $file) {
my $fh;
open $fh, "<", $file or die $!;
return $fh;
}
};
do \('print "Hello ' . (shift || "world") . '\n"');
No string eval there. No sir. I wonder if it circumvents
things like Safe...
Update:
This is terser. You don't need the BEGIN block, but it
demonstrates that the technique is robust and automatically lets regular
filenames through. (In this case PerlIO/scalar.pm)
use strict;
use warnings;
BEGIN {
unshift @INC, sub {
$_[1];
};
}
require PerlIO::scalar;
open my $fh, "<", \('print "Hello ' . (shift || "world") . '\n"');
do $fh;