in reply to Benchmark.pm's scoping behavior

Oh... everything I said before holds, but I thought of a little example I could use to prove that your code isn't doing what you think it is. Pull out the R package stuff into a separate file and call it R.pm:
package R; my $R = 10;
Now use that in your other file:
use R; package main; my $subcode = "sub { local \$_; package R; print $R }"; my $subref = eval $subcode; &$subref;
Run it, and what do we get? Nothing. Well, if you have warnings on, you get some warnings about unitialized values, and names only being used once.

The point, though, is that one we've moved the declaration of $R as a lexical variable into a separate file, your code no longer does what you thought it would. Which means that it wasn't doing what you thought it was, in the first place. :)