use strict; use warnings; package Package_One; use vars qw( $VERSION ); #our $VERSION; $VERSION = 'irrelevant'; # "our $VERSION" comes from the target module; without "our" there's no problem my $eval =<<'END_EVAL'; no strict; local $VERSION; $VERSION=undef; do { our $VERSION = 'desired_version'; }; $VERSION END_EVAL printf "Version: %s\n", Package_Two->_eval($eval); package Package_Two; sub _eval { eval $_[1]; }