in reply to remove blank lines with regex

You could try:

$line =~ s!$/+!$/!sg;

Note the replacement of / with ! in the regex. This is perfectly allowed and allows te easy use of \$.

In my opinion this is better than s/\n+/\n/ as it allows for the possibility that you line terminator $/ has been set to something else (admittedly, this must be done explictly by you). However taking this approach is a safer option from the point of view of bugs being introduced if you bury s/\n+/\n/ in a library and then start getting random errors from users on the basis they have chnaged \$. I'm not however advocating that what I just said doesn't have a counter argument that works the other way.

Arun

Replies are listed 'Best First'.
Re^2: Remove Blank Lines Regex
by tadman (Prior) on May 21, 2002 at 17:56 UTC
    Better, yes, but broken? If $/ consists of multiple characters then it will not function as intented. Consider this as an example:
    my $foo = "Camel meme power supreme!"; my $bar = "me"; $foo =~ s/$bar+/$bar/g;
    The answer is not what you'd expect, the string remains unchanged. It seems that brackets are required so that the entire variable is repeated and not just the last character of the variable. "meme" to "me" and not "mee" to "me":
    $foo =~ s/($bar)+/$bar/g;
    So this translates back into something like this:
    $line =~ s!($/)+!$/!g;
    /s modifies ., which is not used, so ditch it. You don't need to use /s just to work on multi-line strings, but sometimes you want to.