#! perl -slw use strict; use Data::Dump qw[ pp ]; use List::Util qw[ reduce ]; our $N //= 1; my %byFreq = map{ int( rand 1000 ) => $_ } 'A'x$N .. 'Z'x$N; pp \%byFreq; my @tree; reduce{ $a->[0] = $byFreq{ $b }; $a->[1] = []; } \@tree, sort{ $a <=> $b } keys %byFreq; pp \@tree; #### __END__ C:\test>1031775.pl { 14 => "E", 49 => "I", 75 => "N", 81 => "R", 128 => "W", 178 => "Q", 180 => "X", 189 => "V", 199 => "S", 354 => "O", 359 => "J", 403 => "G", 485 => "T", 492 => "Z", 554 => "B", 603 => "M", 604 => "K", 608 => "Y", 632 => "C", 749 => "D", 779 => "P", 795 => "L", 846 => "U", 864 => "F", 921 => "A", 948 => "H", } [ "E", [ "I", [ "N", [ "R", [ "W", [ "Q", [ "X", [ "V", [ "S", [ "O", [ "J", [ "G", [ "T", [ "Z", [ "B", [ "M", [ "K", [ "Y", ["C", ["D", ["P", ["L", ["U", ["F", ["A", ["H", []]]]]]]]], ], ], ], ], ], ], ], ], ], ], ], ], ], ], ], ], ], ]