The problem here is that open has a prototype, so it puts the @$_ in scalar context instead of interpolating it into the argument list.
in reply to Pitfalls met while opening multiple files
For normal routines that can be circumvented by calling it with an ampersand, &yourroutine(@$_). Unfortunately I don't know how that works with open, neither &CORE::open(@$_) nor &open(@$_) work.
Perl 6 solves this problem by introducing a new syntax for explicitly interpolating arrays and hashes into argument lists, there it would be spelled open |@argumentlist.