in reply to condense conditional

The most direct translation would be to just use a temporary value to store how far down the tree you are. Something like (untested, but perl -c likes it):

if(defined($value)) { chomp($value); my $lval = $devstats->{$nic}; for(my $i = $dirCnt ; $i >= 6 ; $i--) { $lval = $lval->{$data{$i-1}}; } $lval->{$key} = $value; }

Of course, that's a lot of magic numbers, so a better solution is probably to rearrange things to be a little more semantically meaningful. Perhaps in how the filename is assembled, and how you're passing it to readfile(), if that's possible? If not, preprocessing @data a little... it'll be longer, but probably clearer.