As of commit f4df43b5, lock is parsed the same way as tied. Before
that, the prototype was effectively \[$@%&*], but only because
it was buggy (an lvalue sub itself would be passed to the function,
instead of its return value). Yet its prototype was set to \$, which
was just wrong.