# returns error message on failure, undefined value on success sub checkUPC { # grab and immediately split upc into array, 1 char per element my @chars = split(//, shift); # return error message if incorrect length if( $#chars != 11 ) { return "should be 12 digits in length"; } # loop through to seperately sum even and odd chars foreach (0..10) { if($_ % 2 == 0) { $odd += $chars[$_]; } else { $even += $chars[$_]; } } # calculate correct check digit $mult = $check = ($odd * 3) + $even; while($mult % 10 != 0) { $mult++; } $check = $mult-$check; # return error message if wrong check digit was initially given if($check != $chars[11]) { return "invalid checkdigit...should be $check"; } # otherwise, if validated, return undefined return; }