Another approach

_apply_($menu, qe/Some Item/i, sub {
    $_->{description} = 'I have been Changed!!';
}

sub _apply {
    my $menu = shift;
    my $descRE = shift;
    my $code_ref = shift;

    foreach my $entry (@$menu) {
        next if ref($entry) eq 'ARRAY';

        if (defined $entry->{menu}) {
            # recursive call
            _apply($entry->{menu}, $descRE, $code_ref);
        }

        $code_ref->($entry) if $entry->{desc} =~ $descRE;
    }
}