in reply to Checking the command line arguments

A subroutine works, but you should use it a bit differently:
if (arguments_ok(@ARGV)) { # do something } else { # complain loudly }

You might also be interested in the FindBin core module, which might be more reliable than $0 . ".pl"

Also not that if you want to start another process via system, you should use the LIST form so that spaces in arguments don't confuse your program:

system($^X, "some_script.pl", @ARGV);