#!/usr/bin/perl # https://perlmonks.org/?node_id=1226189 use strict; use warnings; while( ) { if( /\|([^|,]*(?:,[^|,]*)+)\|/ ) { print "$`|$_|$'" for split /,/, $1; } else { print; } } __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