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]