in reply to called too early to check prototype

The solution provided in 1st reply is correct, and also there is another way to fix this problem: to put a '&' before those function calls, do something like:
&func_abc($param_abc);
I made a simple testing program, which has three parts:
sub say_something($); #prototype sub say_something { #sub body print "I got ".shift()."\n"; } say_something("an apple");# call the sub.
I played with it, with different sequences of the three parts(there are other combinations, you can play with them):
  1. proto->body->call, this fine.
  2. proto->call->body, this is also fine.
  3. call->proto->func, this is not fine, and got the error msg you got.
  4. call with &->proto->func, it back to okay.