# Extract fields my @fields = /((?:[^#@]+|#.)*)/sg; # Remove seperators my $ff = 0; @fields = grep $ff^=1, @fields; # Unescape s/#(.)/$1/sg for @fields;