in reply to Override the open builtin globally

When I use a lexical (open $file, ...) I get undef into $_[0].

Well, if your calling code is something like

my $file; open $file, ...

then $file is undef, and open changes its value to be a file handle - but since you haven't called the core open() yet, you still see the undef.