---------- Forwarded message ---------- Date: Fri, 19 Apr 2002 19:06:30 -0400 (EDT) From: Jeff 'japhy' Pinyan <[EMAIL PROTECTED]> Reply-To: [EMAIL PROTECTED] To: drieux <[EMAIL PROTECTED]> Subject: Re: B/C - Re: help parsing file
On Apr 19, drieux said: >> while (<FH>) { >> next unless /^$prefix/; >> $_ .= <FH> while /^$prefix/gm; >> print; >> } > >why is it that when I try to do this - my perldebugger >goes out to lunch... Because I messed up. I never actually ran that code -- it was what I thought of doing, and it mutated to the final working code. Sorry. The //g trick only works when the variable isn't changed. However, I'm appending to $_, so the trick breaks. The trick can be unbroken in the following manner: while (<FH>) { next unless /^$prefix/; pos = (pos, $_ .= <FH>)[0] while /^$prefix/gm; print; } pos() happens to hold the place where the next //g match starts from in the string it matches against. It can be read from or written to. $p = pos $str; pos $str = 5; # that's pos($str) = 5, not pos($str = 5) pos()'s default argument is $_. So we restore pos() to the value it had prior to changing $_, and change $_ all at once. Trickery. This cruft is another reason to use the flip-flop approach. -- Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/ RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/ ** Look for "Regular Expressions in Perl" published by Manning, in 2002 ** <stu> what does y/// stand for? <tenderpuss> why, yansliterate of course. [ I'm looking for programming work. If you like my work, let me know. ] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]