<hang head in shame>
you're right of course adding () to the bareword foo made the problem go away, I though I had found the reason a bigger program that does much the same thing was failing it however report in $@ it however already has the () because two parameters are being passed to it, it sets $@ to
Can't call method "gm" without a package or object reference at (eval 2) line 99.
which leads me to believe now it's not the same problem at all..well that and there is a use strict in that one and it doesn't complain.