use strict; my $ref = symetrical(100); for my $key (sort {$a <=> $b} keys %$ref) { printf "%-10d%d\n",$key,$ref->{$key}; } sub symetrical { my %symet; my $max = shift; for my $i (0..$max) { my $square = $i * $i; if (sym($square)) { $symet{$i} = $square if sym($i); } } sub sym { $num = shift; ($num eq reverse $num) ? $num : ''; } return \%symet; } __END__ Sample output 1 1 2 4 3 9 11 121 22 484 101 10201 111 12321 121 14641 202 40804 212 44944