Привет, У меня проблема с моей программой, я написал код ниже и возвращает ожидаемый результат. Однако меня интересует только первое и последнее появление матчей. Как мне это сделать?Соответствие:
foreach (@array)
{
$element = $_;
foreach(@array2)
{
if($_ =~ s/($element)//ig)
{
print "$_ \n";
}
}
}
В настоящее время цикл проходит через каждый элемент массива, находит его во втором массиве и печатает всю строку. Он возвращает ожидаемый результат, однако мне нужно первое совпадение и последнее совпадение.
Это кажется [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Не могли бы вы объяснить, что именно вы пытаетесь сделать, а не как это сделать? Там может быть лучший подход, чем использование вложенных циклов. – ThisSuitIsBlackNot
Поместите совпадения в список, а не распечатывайте их. Затем после цикла напечатайте первый и последний элементы списка. – Barmar
Вы используете подстановку, которая * removeg * все найденные совпадения, и мне интересно, понимаете ли вы, что это может повлиять на то, какие строки совпадают позже. Например, если '@ array' содержит' ('abc', 'def') ', а один элемент' @ array2' - 'dabcef', тогда первый проход скажет, что' abc' был найден *, но измените элемент от 'dabcef' до' def' *. Таким образом, в следующем проходе будет указано, что 'def' также соответствует, что было неверно до модификации. Это намеренно? – Borodin