http://www.perlmonks.org?node_id=211187


in reply to Record Separator affecting Regex

I think what you're looking for is the /m modifier. This allows ^ and $ to match newlines in multiline data. Since it appears you need to worry about multiline queries (otherwise, why are you modifying the record separator in the first place), I changed your data to include one.

$/ = ";\n"; while (my $line = <DATA> ){ $line =~ s/^#[^\r\n]*//mg; print "Query: $line\n"; } __DATA__ # one comment # two comment # another comment insert into table_name values(1, 'testing 1 2 3'); # more comments insert into table_name values (2, 'test &#149;');
...gives...
Query: insert into table_name values(1, 'testing 1 2 3'); Query: insert into table_name values (2, 'test &#149;');

You could also add $line =~ s/^\s*$//mg; if you want to get rid of some of those blank lines.

-Bird
Update: I like insensate's solution for removing the blank lines better. Use that one. :)

Replies are listed 'Best First'.
Re: Re: Record Separator affecting Regex
by jdporter (Paladin) on Nov 07, 2002 at 19:41 UTC
    Yeah, I think you have the right idea here, Bird. Better than mine, under the circumstances.

    I'd probably rework it as follows, to get rid of all that extra leading whitespace:

    local $/ = ";\n"; while ( <> ) { s/^#.*$//mg; # kill comments s/^\s+//; # kill all remaining leading whitespace print "Query: $_\n"; }
Re: Re: Record Separator affecting Regex
by Kozz (Friar) on Nov 07, 2002 at 19:26 UTC
    You're absolutely right -- the /m modifier was *exactly* what I needed, and yes, I do have multi-line commands, like create table statements and such. Thanks!