use warnings; use strict; my $string = '79899920179'; my @nums; while (length $string){ no warnings qw/uninitialized/; my $num; $num .= substr($string, 0, 1, '') while (length $string and $num < 32); push @nums, $num; } print join ', ', @nums;