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]

Reply via email to