sub range_to_list { my( $max, $range ) = @_; my( $lo, $sep, $hi ) = $range =~ m[^(\d+)?(?:(-)(\d*))?$] or die "Invalid range:$range\n"; $lo ||= 0; $hi ||= $sep ? $max : $lo; $_ > $max and die "$_ out of range\n" for $lo, $hi; return $lo .. $hi; }