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

Answers


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


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;

Use the + symbol. Here is example:

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

Need Your Help

PowerMock + Mockito VS Mockito alone

java mocking mockito powermock

Can anyone please summarize, what exactly features gives you adding PowerMock on top of the Mockito?

Get index of selected tab in tabHost

android android-2.2-froyo android-tabhost

I'm trying to store the index of the currently selected tab in onSaveInstanceState so I can restore it. However the getCurrentTab apparantely gives me back the String I used in the etTabHost().newT...