$_[0]=$handle
unless defined $_[0]; # pass up to caller
####
*CORE::GLOBAL::open=sub (*;$@) {
use Symbol();
my $handle;
if (defined $_[0]) {
$handle = Symbol::qualify_to_ref($_[0], scalar caller);
}
if (@_ == 1) {
CORE::open $handle
or warn $! and return 0;
}
elsif (@_ == 2) {
CORE::open $handle, $_[1]
or warn $! and return 0;
}
elsif (@_ == 3) {
if (defined $_[2]) {
CORE::open $handle, $_[1], $_[2]
or warn $! and return 0;
}
else {
CORE::open $handle, $_[1], undef # special case
or warn $! and return 0;
};
}
else {
CORE::open $handle, $_[1], $_[2], @_[3..$#_]
or warn $! and return 0;
};
$_[0]=$handle
unless defined $_[0]; # pass up to caller
tie *$handle,"TieInput",*$handle;
};
####
$ ./953722.pl
opening in1.txt:
TieInput: $_s = \'in1 A
';
$s = \'in1 A
';
at ./953722.pl line 107, <$In> line 1.
TieInput: @_a = (
'in1 B
',
'in1 C
'
);
@a = (
'in1 B
',
'in1 C
'
);
at ./953722.pl line 109, <$In> line 3.
opening in1.txt and in2.txt:
TieInput: $_s = \'in1 A
';
$s = \'in1 A
';
at ./953722.pl line 118, <$In> line 1.
TieInput: $_s = \'in2 A
';
$s = \'in2 A
';
at ./953722.pl line 120, <$In> line 1.
TieInput: @_a = (
'in1 B
',
'in1 C
'
);
@a = (
'in1 B
',
'in1 C
'
);
at ./953722.pl line 122, <$In> line 3.
TieInput: @_a = (
'in2 B
',
'in2 C
'
);
@a = (
'in2 B
',
'in2 C
'
);
at ./953722.pl line 124, <$In> line 3.