use warnings; use strict; my $x = shift; length($x) && $x=~/\A[0-9]+\z/ or die "Need a non-negative integer"; my $y = "1000000000000000000000000000000000000000"; # just for demo die "Integer too big" if length($x)>length($y) or sprintf("%0*s", length($y), $x) gt $y; print "$x is ok\n"; # *now* you can treat $x like a number