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

Thank you. Yes, that certainly works for $P2.
What I really wanted though was a single specification for "-delim =>" that uses back-slash OR forward-slash as delimiters.

However, your suggestion has sparked an idea. It turns out that {-delim => '\\\/'} does indeed work for both cases. That's great!

Cheers, Ron.

Replies are listed 'Best First'.
Re^3: Delimiters in Regexp::Common
by swl (Prior) on May 06, 2018 at 21:56 UTC

    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)|( +?:\))(?:[^\\\)]*(?:\\.[^\\\)]*)*)(?:\))))