use strict; use warnings; sub globify { local $" = ","; my @commas = map qq{"$_"}, split /,/, $_; @commas == 1 ? qq{"$_"} : "{@commas}"; } while () { print glob ( join '|', map {globify} split /\|/ ,$_ ); } __DATA__ some text FOO | some text BAR | oh , no , commas | some text BAZ | some text QUX some text FOO | some text BAR | single | some text BAZ | some text QUX #### some text FOO | some text BAR | oh | some text BAZ | some text QUX some text FOO | some text BAR | no | some text BAZ | some text QUX some text FOO | some text BAR | commas | some text BAZ | some text QUX some text FOO | some text BAR | single | some text BAZ | some text QUX