#!perl -w use strict; my $test; $test = 2; pr( 'no_zero' , $test , no_zero($test) ); # -> '1' pr( 'a_zero' , $test , a_zero($test) ); # -> '1' $test = 'pop'; pr( 'no_zero' , $test , no_zero($test) ); # -> 'undefined value' or '' pr( 'a_zero' , $test , a_zero($test) ); # -> '0' $test = undef; pr( 'no_zero' , $test , no_zero($test) ); # -> '' pr( 'a_zero' , $test , a_zero($test) ); # -> '0' sub no_zero { my $n = shift; my $re = qr/^ \d+ $/x; return #defined $n && $n =~ m/$re/ scalar( defined $n && $n =~ m/$re/ ) ; } sub a_zero { return no_zero( $_[0] ) || 0; } sub pr { my ($func , $val , $result) = @_; printf "%7s( '%s' ): '%s'\n" , ( $func , def($val) , def($result) ); sub def { my $v = shift; return ( (defined $v) ? $v : 'undefined value' ); } } #### sub if_integer { my $i = shift; return defined $i && $i =~ m/^\d+$/; } #### return defined $i && $i =~ m/^\d+$/ || 0;