#!/usr/bin/perl -w use diagnostics; crash(); sub crash($$){die@_} __END__ main::crash() called too early to check prototype at file.pl line 3 (#1) (W prototype) You've called a function that has a prototype before the parser saw a definition or declaration for it, and Perl could not check that the call conforms to the prototype. You need to either add an early prototype declaration for the subroutine in question, or move the subroutine definition ahead of the call to get proper prototype checking. Alternatively, if you are certain that you're calling the function correctly, you may put an ampersand before the name to avoid the warning. See perlsub. Died at file.pl line 4 (#2) (F) You passed die() an empty string (the equivalent of die "") or you called it with no args and both $@ and $_ were empty. Uncaught exception from user code: Died at file.pl line 4. main::crash() called at file.pl line 3