$s = "1-6,27,105-170,512,670-675";; @ranges = map{ my( $lo, $hi ) = split '-', $_; $hi //= $lo; die 'Bad input' if $lo > $hi; [ $lo, $hi ] } split ',', $s;; print "@$_" for @ranges;; 1 6 27 27 105 170 512 512 670 675