Did you test this? The following won't work:
$fh->$AUTOLOAD( @args ) for my $fh @$self;
Perl hasn't seen the
my when it sees the first mention of
$fh so that one refers to the global variable of that name. Either declare the variable on a line by itself or use
$_.
$_->$AUTOLOAD(@args) for @$self;
Makeshifts last the longest.