thomas.cloud
thomas.cloud

Reputation: 963

Can I break my Perl regex into multiple lines in my code?

I was just wondering if I am able to break up a long regular expression that I have in my Perl code so that it is written over several lines? I just want the readability and compactness to be intact for anyone that might view my code after its completion. I am looking for something analagous to the way in which strings are broken up over several lines in Perl. For example:

print "This is a string that is ". #1st line
      "very long, so it is on 2 lines!"; #2nd line
# prints = "This is a string that is very long, so it is on 2 lines!" 

I am not sure how to do this with a regex since it does not use quotes. If I press enter I am guessing it will put a new line character in my regex making it erroneous. I would like to do something along the lines of:

if($variable_1 = /abcde_abcde_abdcae_adafdf_      #1st regex line
                 abscd_casdf_asdfd_....asdfaf/){ #regex continued
    # do something
} # regex looking for pattern = abcde_abcde_abdcae_adafdf_abscd_casdf_asdfd_....asdfaf

Upvotes: 21

Views: 8505

Answers (3)

Yegor
Yegor

Reputation: 81

Use the + symbol. Here is example:

push @steps, $steps[-1] +
        $radial_velocity * $elapsed_time +
        $orbital_velocity * ($phase + $phase_shift) -
        $DRAG_COEFF * $altitude;

Upvotes: 0

Todd A. Jacobs
Todd A. Jacobs

Reputation: 84343

Use the Whitespace-Insensitive Modifier

The perlre(1) manual page says:

The "/x" modifier itself needs a little more explanation. It tells the regular expression parser to ignore most whitespace that is neither backslashed nor within a character class. You can use this to break up your regular expression into (slightly) more readable parts.

You can use this to create multiline expressions. For example:

/
  abcde_abcde_abdcae_adafdf_    # Have some comments, too. 
  abscd_casdf_asdfd_....asdfaf  # Here's your second line.
/x

Literal Spaces

If your match will contain spaces, you need to make them explicit in your regular expression when using the /x modifier. For example, /foo bar baz quux/x won't match a space-separated string the way you might expect. Instead, you need something like the following:

print "true\n" if
    /
        foo
        \s+  # You need explicit spaces...
        bar
        \s+  # because the modifier will...
        baz
        \s+  # otherwise ignore literal spaces.
        quux
    /x;

Upvotes: 27

Alex Howansky
Alex Howansky

Reputation: 53563

Yep, see the /x modifier in the perlre man page.

Upvotes: 9

Related Questions