my $data_line = qr/(\S+)\s+\S+\s+\S+\d+.tar.gz/; use vars qw(%pkg); sub build { my $file = shift; use FileHandle; my $fh = new FileHandle $file or die "couldnt open: $!"; while (<$fh>) { next unless /$data_line/; my $pkg = $1; my @tree_struct = split '::', $pkg; @tree_struct = map { "'$_'" } @tree_struct; my $join = join '}{', @tree_struct ; $join = "{$join}"; my $eval = "\$pkg$join = '$pkg'"; warn $eval; eval $eval; } use Data::Dumper; warn Dumper(\%pkg); }