You have already discovered that you need the EXPR (not BLOCK) form of eval. With this change, your original idea of removing $VAR1 works fine.
use strict;
use warnings;
use Data::Dumper qw(Dumper);
my $hash;
{
local $/;
$hash = <DATA>;
}
#$hash = eval { $hash };
$hash = eval $hash ;
print keys %$hash; # error (no more)
__DATA__
#$VAR1 = {
{
'blah.com' => [
'212.235.56.176'
],
'blah.org' => [
'212.235.56.176'
],
'www.boo.org' => [
'212.235.56.176'
],
};
OUTPUT:
C:\Users\Bill\forums\monks>perl 11116141.pl
blah.comblah.orgwww.boo.org