Harry Putnam wrote: > > John, > Somehow I over looked your answer to my question and have since > posted a couple more similar questions. Your answer here pretty much > provides a way to make my scripts work.... Thanks. > > If possible, please note my comments in the code below and point me to > something that will allow me to understand what is happening in that > syntax. > > "John W. Krahn" <[EMAIL PROTECTED]> writes: > > > Harry Putnam wrote: > >> > >> Something I'm messing with today and can't get right. I've presented > >> a simplified version of what I'd like to do. It amounts to setting > >> the strings inside a s/some_re/some_rep/ type action. > >> > >> I can get it to work fine if both elements are simple and don't > >> involve grouping and back reference. But grouping and back reference > >> would make my script (the real one ) considerably more versatile. > >> > >> Examples: > >> > >> cat rein.pl > >> > >> #!/usr/local/bin/perl -w > >> $strp_re = shift; > > > > You COULD compile this to a regex now which is a bit more efficient. > > > > my $strp_re = qr/@{[shift]}/; > > I find `qr' explained very briefly in `Programming Perl [3rd]'
It should be in the documentation installed on your hard disk along with Perl. perldoc perlop > but not enough to understand what role these play => [EMAIL PROTECTED]' > > I understand what shift is doing but not the rest. The @{[]} idiom allows an expression or function to be evaluated in a double quoted string. Without that it would be a two step process like this: my $strp_re = shift; $strp_re = qr/$strp_re/; > >> $rein_str = shift; > >> > >> while(<>){ > >> chomp; > >> $pre_out = $_; > >> ($out = $pre_out) =~ s/$strp_re/$rein_str/; > > > > ($out = $pre_out) =~ s/$strp_re/qq["$rein_str"]/ee; > > I find no reference to `qq' used like this in `Programming Perl > [3rd]'. Ditto for a double `ee' in this context. I can sort of see > what is happing ... That is, $rein_str is being presented to the > interpreter in such a way that it knows how to read it. But not > clear what all is happening here. The /e option eval()s the replacement string however, because you have back-reference variables ($1, $2, etc.) in the replacement string you have to wrap it in double quotes for each eval. John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]