From: Chris Devers <[EMAIL PROTECTED]> > On Mon, 2 Aug 2004, Bob Showalter wrote: > > sudhindra k s wrote: > >> Hi > >> > >> Can someone please tell me what the following code is trying to do > >> > >> > >> if ( /CR List/ .. /\(2\)/ ) { > >> if ( /CR List/ ) { print " $'\n"; } > >> elsif ( /\(2\)/ ) {print " $` \n" ;} > >> else { print " $_\n";} > >> } > >> > >> I know that it is trying to print whatever is there between CR List > >> and (2). But i am not able guess more than that. > > > The whys and hows of this are complicated -- it's worth reading _MRE_. > The short version is that you should almost always replace code that > uses $`, $&, or $' with functionally equivalent code that gets the > same result without using these variables. For example, this code > could be: > > if ( /CR List(.*)/ .. /(.*)\(2\)/ ) { > if ( /CR List/ ) { print " $1\n"; } > elsif ( /\(2\)/ ) { print " $1 \n" ;} > else { print " $_\n";} > } > > ...or something to that effect.
There should be if ( /CR List(.*)/ .. /(.*?)\(2\)/ ) { Otherwise you might get different results. The original finds the first (2) in the line, your version the last one. > Of course, it could be that more recent versions of Perl have fixed > this problem and I'm not aware of it. If so, please correct me :-) I believe the penalty is still there. Of course in a one-off script that contains no other regexps it may not matter, but I'd still recommend forgetting these variables even exist. Jenda ===== [EMAIL PROTECTED] === http://Jenda.Krynicky.cz ===== When it comes to wine, women and song, wizards are allowed to get drunk and croon as much as they like. -- Terry Pratchett in Sourcery -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>