I remember a similar patch once before that did the expand/interpolate
thing.  There was some reason people didn't like it.

> +See also ``How can I expand/interpolate variables in text strings?''
> +in this section of the FAQ.
> +=head2 How can I expand/interpolate variables in text strings?
>  
> -Let's assume that you have a string like:
> +To process a string through Perl's interpolation engine simply: 
>  
> -    $text = 'this has a $foo in it and a $bar';
> +    $text = 'this has a $foo in it...\n  ...and a $bar';
> +    # Assume $text does not contain "\nEND\n" 
> +    chop ( $text = eval "<<END\n$text\nEND\n" );
> +    die if $@;

I don't think we want to show eval in this context in the FAQ.  It
will confused beginners to no end.

> +This will not work, for good reason, if $text is tainted.  For an
> +explanation of how $text could execute arbitrary Perl see ``How do I
> +expand function calls in a string?'' in this section of the FAQ.

What is tainting?  (I know.  I'm being rhetorical.) That seems outside
the scope of the question.

> -    $text =~ s/\$(\w+)/${$1}/g;  # no /e needed
> +If $text comes from a source external to the Perl script (typically a
> +file) and you trust executable code from that source then simply
> +untaint it.  This is no more or less dangerous than using C<do()>.
> +For an explaination of tainting see L<perlsec>.

Definitely outside the scope.

> -But since they are probably lexicals, or at least, they could
> -be, you'd have to do this:
> +If you do not trust the source, you can limit and launder the parts of
> +$text that are passed to eval():
>  
> -    $text =~ s/(\$\w+)/$1/eeg;
> -    die if $@;                       # needed /ee, not /e
> +    $text =~ s/(\$\w+)/$1/eeg; # needed /ee, not /e

I'm not sure why you removed the error checking.  Sure, it doesn't
necessarily fit either, but it is better to explain it than eliminate
it. 

> -See also ``How do I expand function calls in a string?'' in this section
> -of the FAQ.
> +For other variations on the theme of text templates see the sprintf()
> +function and numerous modules on CPAN.

Huh?

That's removing information.

-R

Reply via email to