in reply to Symbolic references

As you're reading from the commandline, you'll probably want either a way to warn of invalid keys or, perhaps, ignore them. The following does the latter.

A valid list of keys:

$ perl -Mstrict -Mwarnings -E ' my %x = ( a => { b => { d => 4, e => 5 }, c => 3 } ); my $y = \%x; for (split /\// => $ARGV[0]) { last unless ref $y; $y = $y->{$_}; } say $y if defined $y; ' a/b/e 5

A partially valid list of keys:

$ perl -Mstrict -Mwarnings -E ' my %x = ( a => { b => { d => 4, e => 5 }, c => 3 } ); my $y = \%x; for (split /\// => $ARGV[0]) { last unless ref $y; $y = $y->{$_}; } say $y if defined $y; ' a/c/e 3

An invalid list of keys:

$ perl -Mstrict -Mwarnings -E ' my %x = ( a => { b => { d => 4, e => 5 }, c => 3 } ); my $y = \%x; for (split /\// => $ARGV[0]) { last unless ref $y; $y = $y->{$_}; } say $y if defined $y; ' a/d/e

-- Ken