Skip to content

proposal: support the x flag #638

Description

@spenserblack

Originally posted golang/go#79835, but was informed I should post this here.

The x flag instructs the parser to ignore most whitespace, unless it is backslashed or within brackets. It's useful for breaking up long patterns into readable parts. Additionally, the x flag allows comments within the pattern, starting with a #

For example:

# multiline.pl
s/
# A comment
lang
|
pher
/!/x
echo "Golang" | perl -p multiline.pl # Go!
echo "Gopher" | perl -p multiline.pl # Go!

More details: https://perldoc.perl.org/perlre#/x-and-/xx


I haven't found any duplicate issues, but I did find #3 (comment), which says that x is arguably unnecessary.

There are certainly workarounds for breaking up a regular expression into multiple lines without the x flag. In Go terms, one could use strings.Join on an array of strings, for example, and it would also be pretty simple to clean up the strings to remove comments and ignored spaces.

In my personal use case, when a regular expression gets significantly complicated, I like to move it to its own file, and use go:embed (or the equivalent in another language). This helps avoid clutter in the code file IMO, and allows one to focus on the code logic. I believe that the x flag helps support this use case.

To my knowledge, x is currently supported in Perl, Ruby, and Rust.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions