while(...){ chomp; if (m{([[:digit:]].+?);.+?$tags[0].+?=.+?((-)?[[:digit:]].+?)$}s) { printf "%s,%s\n", $1, $2; } .... } #### why use '.*' after $2 i.e (\-?\d+.?\d*).*/. Your code will still have worked as (\-?\d+.?\d*) for your $2.