in reply to capturing $@ from an eval'd require

Are you sure foo.pl is not in your PERL5LIB path? Also do you have any $SIG{__DIE__} handlers in your script? Here's some example code that works as expected for me
# foo.pl print "this is a "syntax" error"; # test.pl eval q{ my $fl = "foo.pl"; require "$fl"; }; __output__ Bareword found where operator expected at foo.pl line 1, near ""this i +s a "syntax" (Missing operator before syntax?) String found where operator expected at foo.pl line 1, near "syntax" e +rror""
Also note that your qq{} is being interpolated so $file will be seen in your string as whatever it's value is.
HTH

_________
broquaint