Я думаю, вы могли бы пересмотреть свой метод.Вы хотите найти все значения в @x
, которые больше всех в @y
.Вы не должны зацикливаться на всех @y
каждый раз, вы должны найти максимальное из них, а затем отфильтровать по максимальному.
use strict;
use warnings;
use List::Util 'max';
my @x= qw(1 5 3 4 6);
my @y= qw(-3 4 2 1 3);
my $ymax = max @y;
my @x_result = grep { $_ > $ymax } @x;
Или, поскольку я без ума от нового ключевого слова state
:
use strict;
use warnings;
use 5.10.0;
use List::Util 'max';
my @x= qw(1 5 3 4 6);
my @y= qw(-3 4 2 1 3);
my @x_result = grep { state $ymax = max @y; $_ > $ymax } @x;
Редактировать: при перечитывании предыдущих ответов это та же концепция, что и у angel_007, хотя я думаю, что эта реализация более самодокументируемая / читабельная.