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.