#!/usr/bin/perl use strict; use warnings; use Data::Dumper; my $test = { a => '-15-19,30,35,120', b => '15-17,30,35,40', c => '15-18,30,35,120' }; for my $key (keys %$test) { print "Processing '$key'\n"; $test->{$key} = [ map { /(-?\d+)-(-?\d+)/ ? ($1..$2) : 0+$_ } split(',', $test->{$key}) ]; } print Dumper($test);