in reply to @_ the default variable?

If you want shift to work on an array, tell it to do so explicitly. There are ways around this by mangling the symbol table, but it's bad karma in this case. Your best bet is to do exactly what you said you don't want to do, and type three extra characters.

my $n = shift @_;