sub strings_to_one_span { my %numbers; @numbers{ map { (/(-?\d+)-(-?\d+)/ or /((-?\d+))/) ? ($1 .. $2) : () } split /\s*,\s*/ } = () for @_; sort { $a <=> $b } keys %numbers }