#!/usr/bin/perl use warnings; use strict; use Time::HiRes qw ( usleep ); $| = 1; print "number of digits: "; my $num = ; chomp $num; if($num < 1){ print "grirrrrr. You can't do that! Number must be 1 or greater!!!\n"; exit(0); } print randmiz0r($num); sub randmiz0r{ my $digCount = shift; my $digCountChanging = $digCount + 1; #offset for first subtraction my $results = ""; for(my $i = 0;$i < $digCount;$i++){ my $randInput = 1 . (0 x ($digCountChanging - 1)); #retreave the last diggit my @prepLastDig = split //, &randmore($randInput); my $lastDig = pop @prepLastDig; $results = $lastDig . $results; #sleep because rand funct is time based usleep( int rand int rand 10000 ); # sleep for microseconds } if($results =~ m/^0/){ $results = catchStartZero($results); #numbers like 0345 don't exist } return $results . "\n"; } sub randmore{ my $r = shift; my $oddCatch = $r % 2; $r = $r - $oddCatch; return (int (rand $r) + int (rand $r)); } sub catchStartZero{ my $removeZero = shift; $removeZero =~ s/^0//; my $notZero = 0; #confusing but nessisary until($notZero ne "0"){ $notZero = randmiz0r(1); chomp $notZero; #a \n is returned with randmiz0r() } return $notZero . $removeZero; }