in reply to Dynamic addressing in a hash

Data::Diver may fit the bill:

use strict; use warnings; use Data::Diver qw(Dive); my $inFile = <<STR; name,address-virtual-email movie-role,hoig-boig-loig-shmoig STR my $js = { name => "Poo Bear", address => {virtual => {email => 'the.woods@erewhon.com'}}, movie => {role => "Bear"}, hoig => {boig => {loig => {shmoig => "doig"}}} }; open my $fIn, '<', \$inFile; for my $line (<$fIn>) { chomp $line; my @parts = split ',', $line; for my $part (@parts) { my @keys = split '-', $part; print "@keys: ", Dive($js, @keys), "\n"; } }

Prints:

name: Poo Bear address virtual email: the.woods@erewhon.com movie role: Bear hoig boig loig shmoig: doig
Optimising for fewest key strokes only makes sense transmitting to Pluto or beyond