>perl -wMstrict -le "my ($w, $x, $y) = qw(YUU EKS); ;; my $scalar = qr{ \$ \s* (?: { \s* \w+ } | \w+ ) }xms; ;; my $interpol = q{hi from '$w' and ${x}also $y and $z too}; ;; $interpol =~ s{ ($scalar) } { no warnings qw(ambiguous); my $e = eval qq{$1}; $@ ? qq{[['$1' non-existant]]} : ! defined($e) ? qq{[['$1' undefined]]} : $e; }xmseg; ;; print qq{'$interpol'}; " 'hi from 'YUU' and EKSalso [['$y' undefined]] and [['$z' non-existant] +] too'

Update: I like this one better: no no warnings, and it supports  \$ escaped dollars and all forms of scalars I know of, which are normalized to a canonical form (sorry for any pesky wraparound, which I tried to fix this up a bit) (tested under 5.8.9 and 5.14.2):

>perl -wMstrict -le "my ($w, $x, $y) = qw(YUU EKS); ;; my $interpol = q{hi \$w from '$w' and ${x}also $y and $z too} . qq{\n} . q{'$x' '$ x' '$ x' '${x}' '${ x}' '${ x}'} . qq{\n} . q{'$y' '$ y' '$ y' '${y}' '${ y}' '${ y}'} . qq{\n} . q{'$z' '$ z' '$ z' '${z}' '${ z}' '${ z}'} . qq{\n} ; print qq{$interpol}; ;; my $scalar = qr{ (?<! \\) \$ \s* (?: { \s* (\w+) } | (\w+) ) }xms; $interpol =~ s{ $scalar } { my $s = qq{\$$^N}; my $e = eval $s; $@ ? qq{[['$s' non-existant]]} : ! defined($e) ? qq{[['$s' undefined]]} : $e; }xmseg; ;; print qq{'$interpol'}; " hi \$w from '$w' and ${x}also $y and $z too '$x' '$ x' '$ x' '${x}' '${ x}' '${ x}' '$y' '$ y' '$ y' '${y}' '${ y}' '${ y}' '$z' '$ z' '$ z' '${z}' '${ z}' '${ z}' 'hi \$w from 'YUU' and EKSalso [['$y' undefined]] and [['$z' non-exist +ant]] too 'EKS' 'EKS' 'EKS' 'EKS' 'EKS' 'EKS' '[['$y' undefined]]' '[['$y' undefined]]' '[['$y' undefined]]' '[['$y' undefined]]' '[['$y' undefined]]' '[['$y' undefined]]' '[['$z' non-existant]]' '[['$z' non-existant]]' '[['$z' non-existant]]' '[['$z' non-existant]]' '[['$z' non-existant]]' '[['$z' non-existant]]' '

In reply to Re: super-simple regex-based template eval --- handling undefined substitutions by AnomalousMonk
in thread super-simple regex-based template eval --- handling undefined substitutions by iaw4

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.