in reply to Re^2: Delimiters in Regexp::Common
in thread Delimiters in Regexp::Common

Good to hear it works. I would have used a bracketed character class like [\\\/] but it turns out that a sequence of delimiters is treated as individual characters so that's unnecessary. It's in the docs now that I read them, so the rest of the post is partly for reference by my future self.

print $RE{delimited}{-delim => 'ab'};

gives

(?:(?|(?:a)(?:[^\\a]*(?:\\.[^\\a]*)*)(?:a)|(?:b)(?:[^\\b]*(?:\\.[^\\b] +*)*)(?:b)))

If one uses a character class then the square brackets are treated as delimiters.

print $RE{delimited}{-delim => '[\\\/]'};

gives

(?:(?|(?:\[)(?:[^\\\[]*(?:\\.[^\\\[]*)*)(?:\[)|(?:\\)(?:[^\\]*(?:(?:\\ +\\)[^\\]*)*)(?:\\)|(?:\\)(?:[^\\]*(?:(?:\\\\)[^\\]*)*)(?:\\)|(?:\/)(? +:[^\\\/]*(?:\\.[^\\\/]*)*)(?:\/)|(?:\])(?:[^\\\]]*(?:\\.[^\\\]]*)*)(? +:\])))

...and a RegExp object appears to be stringified and then treated as a sequence of characters.

print qr'a'; print "\n\n"; print $RE{delimited}{-delim => qr'a'}; print "\n";

gives

(?^:a) (?:(?|(?:\()(?:[^\\\(]*(?:\\.[^\\\(]*)*)(?:\()|(?:\?)(?:[^\\\?]*(?:\\. +[^\\\?]*)*)(?:\?)|(?:\^)(?:[^\\\^]*(?:\\.[^\\\^]*)*)(?:\^)|(?:\:)(?:[ +^\\\:]*(?:\\.[^\\\:]*)*)(?:\:)|(?:a)(?:[^\\a]*(?:\\.[^\\a]*)*)(?:a)|( +?:\))(?:[^\\\)]*(?:\\.[^\\\)]*)*)(?:\))))