#!/usr/bin/perl use strict; use warnings; my $length = 1; my $max = 1; my @strings; for ( 1 .. $max ) { push @strings, rand_nums($length); } print "@strings", "\n"; { my %cache; sub rand_nums { my %local_cache; my ($length) = 8; my $lower = 4; my $upper = 21; my $serial = int( rand($upper - $lower) ) + $lower; $local_cache{$serial} = 1; for ( 2 .. $length ) { my $num = int( rand($upper - $lower) ) + $lower; redo if exists $local_cache{$num}; $local_cache{$num} = 1; $serial .= "-$num"; } rand_nums($length) if exists $cache{$serial}; $cache{$serial} = 1; return $serial; } }