sub exec_data { my ($data, $level) = @_; print "id: $data->{id}\n"; print "level: $level\n"; if (exists $data->{data}) { exec_data($_, $level +1) for @{$data->{data}}; } } exec_data($_, 1) for @{$data->{data}};