my @menu = ( { -label => 'File', -submenu => [ { -label => 'Exit ^Q', -value => '\&exit_dialog' }, { -label => 'Wait ^W', -value => '\&remain_dialog' }, ], }, ); use JSON; print encode_json({menu=>\@menu}); __END__ { "menu" : [ { "-label" : "File", "-submenu" : [ { "-label" : "Exit ^Q", "-value" : "\\&exit_dialog" }, { "-label" : "Wait ^W", "-value" : "\\&remain_dialog" } ] } ] } #### my $menu = decode_json( path( $jsonfile )->slurp_raw ); my $funcname = $menu->{menu}[0]{"-submenu"}[0]{"-value"}; my $funcref = $callback{$funcname}; $menu->{menu}[0]{"-submenu"}[0]{"-value"} = $funcref;