use Set::IntSpan qw(grep_set map_set); $set_spec = "1-20000"; $set = new Set::IntSpan $set_spec; $set_spec = "1-14192,14194,14196-14221"; $u_set = union $set $set_spec; $i_set = intersect $set $set_spec; $x_set = xor $set $set_spec; $d_set = diff $set $set_spec; $c_set = complement $set;