in reply to placeholders without printf?

I haven't tried String::Interpolate myself, but I've used Template a fair bit. It might be overkill for what you want to do, but basic usage is a pretty quick study -- e.g.:
perl -MTemplate -e '$t="Hello [% foo %] world\n"; $T=Template->new(); +$foo="whatever"; $T->process(\$t, {foo=>$foo})'
If you would like to do things like conditionals and loops within the template, then this is a really nice package.