#!/usr/local/bin/perl -w use Getopt::Declare; use vars qw{ $name $result $n }; my $interpolator = new Getopt::Declare (<<'EOCMDS',[-BUILD]); [cluster:none] [repeatable] [pvtype: NOTDELIM /(?:%T.)+/ ] [pvtype: WS /\s+/ ] \{{ }}[] { $self->{result} .= eval "no strict; $cmd"||''; $self->{result} .= $ws if $ws; } [] { $self->{result} .= $str; $self->{result} .= $ws if $ws; } EOCMDS sub interpolate($) { $interpolator->{result} = ''; $interpolator->parse($_[0]); return $interpolator->{result}; } $result = 22; $name = "Sam"; $n = 50; sub average { my ($sum, $count) = (0,0); foreach ( @_ ) { $sum += $_; $count++; } return $count ? $sum/$count : 0; } print interpolate('The person {{$name}} scored {{$result}}'), "\n"; print interpolate('The pass mark was {{$result * 2}}'), "\n"; print interpolate('The average of the first {{2*$n}} numbers is {{average 1..2*$n}}'), "\n";