use Modern::Perl; use Number::Rangify qw/rangify/; while () { my $seq; my @ranges = map { sprintf "%s-%s", $_->Size } rangify( grep $_, map { $seq++; $_ eq '-' ? $seq : '' } split // ); say "@ranges"; } __DATA__ A---B A--B---C ABC--DE A-B--C----DEF------H