#!/usr/bin/perl -wnl use strict; print; print join ' / ', map qq["$_"], m[\G ( ' (?: \\ . | '' | [^'] ) + ' | " (?: \\ . | "" | [^"] ) + " | (?: \\ . | [^'"] ) + ) ]gx; print ""; #### 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(' ");