in reply to Problems with eval

It captures the output from /usr/local/src/fop-0.20.4/fop.sh -xsl xslfo.xsl -xml , appends the value of $inputfile to the result, tries to append the output from a nonexistant program called -pdf to that, and finally appends the contents of $outputfile to that. What you want is
eval { `/usr/local/src/fop-0.20.4/fop.sh -xsl xslfo.xsl -xml $inputf +ile -pdf $outputfile`; }
Perl will interpolate its own variables into that string before calling the shell. Actually, a much better way here is system qw(/usr/local/src/fop-0.20.4/fop.sh -xsl xslfo.xsl), -xml => $inputfile, -pdf => $outputfile;

Makeshifts last the longest.