sub make_dequote_rx { my @char = map quotemeta, @_; my $chars = join '', @char; my $rx = join( ' | ', map(qq[$_ (?: \\\\ . | $_$_ | [^$_] ) + $_], @char), qq[(?: \\\\ . | [^$chars] ) +], ); return qr/\G ( $rx )/x; } my $dequote = make_dequote_rx qw(' ");