On Thu, Mar 07, 2013 at 10:21:40AM +0100, WFB wrote: > Hi, List, Hello,
> To test our software I use perl to start it several times. My
> perl script gather some information and start then the program
> with different parameters.
>
> It works very well, but I have a problem with the return values
> of our program. This return codes are all in an area from 55000
> to 60000. I use open to invoke our program and print the
> output. Finally I use the $? variable and print the error code
> in case of an error.
>
> sub start_test_runner {
> my ($tr = shift, $tr_params) = @_;
I don't see a need for shift here. You can just assign the
arguments array to your list of parameters.
my ($tr, $tr_params) = @_;
> my $pid = open(my $trexe, "$tr \"$tr_params\" |") or die "Could not start
> TestRunner. $!\n";
Instead of escaping the double-quotes consider using the qq//
operator instead. You should also prefer the 3-argument open.
my $pid = open(my $trexe, '-|', qq($tr "$tr_params") or
die "Could not start TestRunner. $!";
> while(<$trexe>) {
> print $_ if $verbose;
No need to reference the default variable with print. That is
implied with no arguments.
print if $verbose;
> }
> waitpid($pid, 0);
> close($trexe);
> my $tr_ret = ($?>>8);
>
> return $tr_ret;
> }
>
> now I read the perldoc perlvar section about $? and realised that only the
> above 8 bits are used for the return value. The first 8 bit are used for
> the system codes. As far as I that understand fit just 256 values in those
> 8 bits.
> Obviously, the error codes given back from my scripts are always wrong.
> For example, if the error code is 55028 I get 62464. With right shift the
> script prints 244.
I think on most platforms 0-255 is the range of possible exit
codes. What platform are you on?
Apparently Windows supports 32-bit integers... The Web suggests
that if you want to get full 32-bit integers on Windows then you
should use the Win32::Process module instead of open. It's not
portable, but at least it will do what you need.
Note: 55028 & 255 = 244. So what is happening is the original
exit code is being truncated down to one byte.
Regards,
--
Brandon McCaig <[email protected]> <[email protected]>
Castopulence Software <https://www.castopulence.org/>
Blog <http://www.bamccaig.com/>
perl -E '$_=q{V zrna gur orfg jvgu jung V fnl. }.
q{Vg qbrfa'\''g nyjnlf fbhaq gung jnl.};
tr/A-Ma-mN-Zn-z/N-Zn-zA-Ma-m/;say'
signature.asc
Description: Digital signature
