As Zaxo mentioned, you can use eval to do this, but it's not ideal. It can easily cause all sorts of hard to debug behavior, not to mention gaping security holes. I would rather approach it using a printf-like template. And instead of pulling the values from named variables directly, pull them from a hash. Here's an example:

my $template = "Hi %foo, I have a %bar.\n"; print fill($template, foo => 'mickey', bar => 'robot'); sub fill { my $template = shift; my %params = @_; $template =~ s/%([a-z]+)/$params{$1}/g; return $template; }

Update: I just noticed that the string you want to "fill in" looks like a function call. Maybe instead of a template type thing, you're actually looking to do a delayed call with different values? If that's the case, then you might be able to get away with a callback using closures.

my ($x, $y, $z); my $callback = sub { print $x, $y, $z, "\n" }; ($x, $y, $z) = (1, 2, 3); $callback->(); ($x, $y, $z) = (4, 5, 6); $callback->();

Update2: Another possiblity:

my $callback = sub { my ($x, $y, $z) = @_; print $x, $y, $z, "\n"; }; $callback->(1,2,3); $callback->(4,5,6);

I suppose, rather than randomly trying to guess exactly what you're doing, I should ask: What exactly are you doing? All you've given us to work with is the solution you've come up with, but we'd really be more help if you told us the actual problem you're trying to solve.


In reply to Re: interpolating preset strings in variable context (or something like that) by Mugatu
in thread interpolating preset strings in variable context (or something like that) by mickey

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.