in reply to split on delimiter unless escaped
One way:
sub dequote { my $x = $_[0]; $x =~ s/!(.)/$1/sg; return $x; } my @fields = map dequote($_), /\G((?:[^!;]+|!.)*)(?:;|\z)/sg; [download]