Ну, если вы не можете сделать ...
for my $result ( ref $results eq 'ARRAY' ? @$results : $results ) {
# Process result
}
или это ...
for my $result ( ! ref $results ? $results : @$results ) {
# Process result
}
тогда вам, возможно, придется попробовать что-то пугающе волосатое, как это! ....
for my $result ( eval { @$results }, eval $results ) {
# Process result
}
и, чтобы избежать этой опасной строки, она становится ужасно уродливой !! ....
for my $result ( eval { $results->[0] } || $results, eval { @$results[1 .. $#{ $results }] } ) {
# Process result
}
PS. Я предпочел бы абстрагировать его в примере с суб-вызовом call_to_service (), представленном reatmon.
Я понял это:
layoutMenus.Show(Cursor.Position.X, Cursor.Position.Y);
Убедитесь, что при размещении контекстного меню вы передаете ему правильные координаты экрана. Вам нужно будет использовать что-то вроде Control.PointToScreen, используя координаты x, y, в зависимости от положения элемента управления в его родительском элементе.