my %x; while(@ARGV) { our $x; local $x=\%x; ()=shift=~m!/+([^/]+)(?{$x=$x->{$^N}||={}})!g; } print Dumper \%x;