The prototype problem is probably because you didn't have just
\&foo, rather something like
\&foo(), in which case the subroutine foo would have been run, which would result in prototype mismatch. However, if you leave out the parentheses completely no subroutine call will be made and such no prototype check will occure there. If you do like
Juerd and
rinceWind said then you're home safe. You must realize that
& is the sigil of subroutines, just like
$ is the sigil of scalars. So you use
& to address it, not call it. If you want to execute the subroutine then you use parentheses, but not otherwise.
(Disclaimer to other monks: Yes, I know this is very simplified and I know about
&foo and it's magical
@_ treatment, but that's another issue and let's not confuse he who seeks help with almost irrelevant details.)