my %hash = ( a => ['15-19',30,35,120], b => ['15-17','30-35',40], c => ['15-18',30,35,120], ); for (values %hash) { @$_ = map {/^(\d+)-(\d+)$/ ? ($1..$2) : $_} @$_; } use Data::Dumper; print Dumper(\%hash);