-f checks if the file is a regular file, so it does not make sense to perl, because it does not see the sign. This is why it works the way you expect, since there is no -fo test.
sub fo{1} my $answer = 1-fo(1);
(and there is no test +f )
sub f{1} my $answer = 1+f(1);
Dry27 source share