use Interpolation name => \&function, ...;
  print "la la la la $name{blah blah blah}";
# This is like doing: $VAR = &function(blah blah blah); print "la la la la $VAR";
print "The sum of three and four is: 3+4";
And they want the 3+4 part to be evaluated, so that it prints this:
The sum of three and four is: 7
Of course, it's a double-quoted string, so it's not evaluated. The only things that are evaluated in double-quoted strings are variable references.
There are solutions to this, but most of them are ugly. This module is less ugly. It lets you define arbitrary interpolation semantics.
For example, you can say
   use Interpolation money => \&commify_with_dollar_sign,
                     E     => 'eval',
                     placename => 'ucwords', 
       ;
And then you can write these:
   print "3 + 4 = $E{3+4}";
   # Prints  ``3 + 4 = 7''
   $SALARY = 57500;
   print "The salary is $money{$SALARY}";
   # Prints  ``The salary is $57,500.00''
   $PLACE1 = 'SAN BERNADINO HIGH SCHOOL';
   $PLACE2 = 'n.y. state';
   print "$placename{$PLACE1} is not near $placename{$PLACE2}";
   # Prints  ``San Bernadino High School is not near N.Y. State";
use call should be name-function pairs. If the pair is ($n, $f), then $n will be the name for the semantics provided by $f.  $f must either be a reference to a function that you supply, or it can be the
name of one of the built-in formatting functions provided by this package.  Interpolation will take over the %n hash in your package, and tie it so that acessing
$n{X} calls f(X) and yields its return value.
If for some reason you want to, you can add new semantics at run time by using
import Interpolation name => function, ...
You can remove them again with
unimport Interpolation 'name', ...
Interpolation provides a few useful built-in formatting functions; you can refer to these
by name in the use or import line. They are:
      eval     Evaluate argument
      null     Same as eval
      identity Also the same as eval
      ucwords  Capitalize Input String Like This
      commify  1428571 => 1,428,571.00
      reverse  reverse string
      sprintf  makes "$S{'%.2f %03d'}{37.5,42}" turn into "37.50 042".
      sprintf1 makes "$S{'%.2f %03d', 37.5,42}" turn into "37.50 042".
$hash{...} is an arbitrary expression, unless it looks like an identifier. There are
two gotchas here.  
  print "$X{localtime}";
Here the X formatter is used to format the literal string
localtime; the localtime built-in function is not invoked. If you really want the current time, use
one of these:
  print "$X{+localtime}";
  print "$X{localtime()}";
  print "$X{What ho?}";
This won't compile---you get `search pattern not terminated'. Why? Because
Perl sees the ? and interprets it as the beginning of a pattern match operator, similar to /. (Ah, you forgot that ?
could be a pattern match delimiter even without a leading m, didn't you?) You really need
  print "$X{'What ho?'}";
  $V = $X{What ho?};
Mark-Jason Dominus (mjd-perl-interpolation@plover.com), Plover Systems co.
See The Interpolation.pm Page for news and upgrades.