On Jun 16, bzzt said: >I'm trying to match a patern in a string but I want to do it a line at a >time. Is there an easier way than this :
>while ($a =~ m/(.+?)\n/g ) { > if ($1 =~ /whatever/g) { > print "$1"; > } Your regex, /(.+?)\n/, is unnecessarily complex. The ? modifier on .+ isn't helping you any, and if you just make the regex /(.+)/g, it will work just fine. That code won't work properly unless 'whatever' is a regex that captures something to $1. If you wanted to print the entire LINE if it matched, you'd have to do: while ($a =~ /(.+)/g) { my $str = $1; if ($str =~ /.../) { print $str } } Someone suggested splitting $a into an array, and matching on the elements of the array. Another approach (although I don't vouch for its speed) would be: while ($a =~ /^(.*pattern.*)$/mg) { print $1; } The ^ and $ anchors change in meaning when used with the /m modifier. Now they mean beginning of line and end of line, paying attention to embedded newlines in $a. -- Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/ RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/ CPAN ID: PINYAN [Need a programmer? If you like my work, let me know.] <stu> what does y/// stand for? <tenderpuss> why, yansliterate of course. -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>