in reply to Trouble using exit codes

Do you want to exit (=terminate) the entire program, or do you just want to return from the subroutine with an "exit code" and error message?

In the latter case, you could simply return two values from the subroutine(1).  Heavily simplified:

#!/usr/bin/perl -w use strict; package search; sub find { # ... return (-1, "my error message"); } package main; my ($exitcode, $msg) = search::find("foo", "bar"); print "exit code: $exitcode, message: '$msg'\n";

Generally, putting anything after an unconditional return in the same branch of execution doesn't make sense, because the code would never be run...

sub find { ... if (...) { return "Passed\n"; $count++; # never executed ... }

___

(1) or if you wanted to get fancy, you could use a dualvar

package search; use Scalar::Util 'dualvar'; sub find { # ... return dualvar -1, "my error message"; } package main; my $ret = search::find("foo", "bar"); printf "exit code: %d, message: '%s'\n", $ret, $ret; # exit code: -1, message: 'my error message'

Replies are listed 'Best First'.
Re^2: Trouble using exit codes
by justkar4u (Novice) on Apr 06, 2011 at 20:04 UTC
    Hi Eliya, Thanks a lot for the quick response !! It does work/display as I expected. It displays the error code that I am returning and the message. HOWEVER if I try this C:\perl>echo %ERRORLEVEL% command after execution of my script, I still get the value 0 for all the cases. Now am wondering if the above command is right or not for determinig the error code/exit code value.(I read somewehere that above command is equivalent of echo $? in linux).

      If you actually do want to exit the program, and pass some exit code to the calling process, there's nothing wrong with using exit.  In the above snippet, you could place the exit after the print, for example.

      ... print "exit code: $exitcode, message: '$msg'\n"; exit $exitcode;

      But note that negative exit codes are typically interpreted unsigned, e.g. in a Unix shell, -1 would turn into 255  (-2 into 254, etc.):

      $ perl -e "exit -1" $ echo $? 255
        You are Awesome !! Thank you Thank you.:) I hope I can program like you one day. "Bows" - Ram