perl -le'$m=1;$s+=$_*($m^=2)for(split(//,$ARGV[0])); print(($s%10)?"BAD":"OK");' #### sub check_upc { my($upc)=@_; my $m = 1; for(split(//,$upc)) { $s += $_ * ($m^=2); } return (($s%10)?"Invalid checkdigit; should be @{[10-($s-chop($upc))%10]}" :undef); }