use List::Util qw[ shuffle ]; my @randUnique = shuffle map{ sprintf "1%011d", $_ } 1 .. 25e3;; print $randUnique[ $_ ] for 1 .. 10;; ## First 10 100000016682 100000002653 100000013669 100000004625 100000009482 100000002763 100000022284 100000000048 100000015278 100000012155 #### my @randUnique = shuffle map{ sprintf "%07d%05d", 1e7+int( rand 1e6 ), $_ } 1 .. 25e3;; print $randUnique[ $_ ] for 1 .. 10;; 1091497817847 1018472205890 1028707802676 1078720009752 1016540524132 1074148507607 1022293016846 1018341020021 1038845808717 1056634512933 #### print time(); my @randUnique = shuffle map{ sprintf "%07d%05d", 1e7+int( rand 1e6 ), $_ } 1 .. 1e6; print time();; 1209603392 1209603398 ## 6 seconds for 1e6