#!/usr/bin/perl use warnings; use strict; use experimental qw( signatures ); use utf8; use Number::Util::Range qw{ convert_number_sequence_to_range }; sub consolidate($s) { my ($name, $range) = $s =~ /(.*):((?:[0-9]+,)+[0-9]+)/g; my @range = split /,/, $range; my $new_range = convert_number_sequence_to_range( array => \@range, min_range_len => 2, separator => '-'); return "$name:" . join ',', @$new_range }