Here's what I want to do more clearly. Given a file:
"Dear $row->{name}; thanks for giving us money."
I want to slurp it in:
undef($/);
$block = <FILE>;
Then substitue in a loop:
$sql = "select email,name from database";
while( $row=getrow($sql) ) {
print "Working on $row->{name}\n";
eval{$block);
send_email($row->{email},$block);
}
The idea is to use perl syntax and the perl parser for the substitution, rather than a made up syntax (e.g. %NAME% and s/%NAME%/$name/). Is this crazy? | [reply] [d/l] [select] |
my $string = 'some $stuff I want to $interpolate';
You can now eval $string to interpolate $stuff and $interpolate, but... You need to add quotes:
my $value = eval "'$string'";
update there's a bug here. read ikegami's reply.
The problem with this, is that you can't know if there are any quotes in $string, so you need to escape the quotes in $string before eval()ing. Also, it will interpolate anything that looks like a variable. Even if the variable in question shouldn't be interpolated at all.
In general, if you want to give your users the maximum amount of control, use eval. In any other case, you're better off using a templating language. You might even use something like Text::Template, which is fast and works more or less like perl. If you want to use something simple that's more strict in its input, use something like GrandFather's post.
| [reply] [d/l] [select] |
Single quotes don't interpolate. You mean
my $value = eval "\"$string\"";
| [reply] [d/l] |