in reply to Re^5: eval, Read environment variable and expand using eval
in thread eval, Read environment variable and expand using eval

no, neither exist nor define autovivify. you're treating notexist and notdefined as if they exist and are defined, therefore they are autovivified (start existing, you treat as hash, become hash)
#!/usr/bin/perl -- use strict; use warnings; use Data::Dumper; my %f; if ( $f{notexist}{baz} ) { warn 1} if ( $f{notdefined}{baz} ) { warn 1} die Dumper(\%f); __END__ $VAR1 = { 'notexist' => {}, 'notdefined' => {} };