use strict; use warnings; my $string = q{BEHACJBDLCENADFEGOFHQAGIHJRBIKJLSCKMLNTDMOFNPOQTGPRIQSKRTMPS}; my @array = sub { my @arr = ( [] ); push @arr, [ map ord( $_ ) - 64, map shift, 1 .. 3 ] while @_; return @arr; }->( split m{}, $string ); printf qq{%02d %02d %02d\n}, @$_ for @array[ 1 .. $#array ];