No, that's correct. our is a scoped name-space global and your string is evaluated in a different scope. You can either put another our in the eval string or name the package in it (ie, print $main::somevar, in which case you don't even need the our).