perl присваивает переменные массиву со связью

#perl #perlscript

#perl #perlscript

Вопрос:

Пожалуйста, посоветуйте, как передать 3 переменные в массив с отношением.

 @item = ($a , $b , $c);
@record = push(@array, @item);
  

Я хочу присвоить значение в @array, чтобы при поиске любого экземпляра я получал значение всех a, b, c.

Есть ли какой-либо способ, кроме запятой, присвоить значение в массиве. например, $ a: $ b: $ c или $ a> $ b> $ c, мне это нужно, потому что я хочу записать 1 запись (a) и получить (a: b: c)

 @array1 = grep(!/$a/, @array);

expected output should be a:b:c 
  

Спасибо,

Комментарии:

1. Что вы имеете в виду, ожидаемый результат должен быть «a: b: c»? Выполнение a grep и присвоение его возвращаемому значению an @array ничего не выведет.

2. На самом деле я добавляю 3 разные переменные в массив. и я хочу, чтобы, если какой-либо из совпадений я хочу удалить все 3 из массива. например, если есть: abc def zte fgi adf Я хочу удалить abc и adf, поскольку я ищу

Ответ №1:

Вопрос не очень ясен. Возможно, вам следует перефразировать это. Однако я понимаю, что вам нужен массив с группами из трех элементов.

Возможно, вы захотите использовать ссылки на массивы.

 @item = ($a , $b , $c);
push(@array, @item);
  

или

 $item = [$a , $b , $c];
push(@array, $item);
  

Кроме того, push не будет возвращать массив, как вы ожидаете. Perldoc говорит:

Возвращает количество элементов в массиве после завершения «нажатия».

Теперь, если вы хотите отфильтровать эти группы из трех элементов, вы можете сделать что-то вроде этого:

 my @output = ();
L1: foreach ( @array ){
    L2: foreach( @$_ ){
        next L1 if $_ eq $a; 
    }
    push @output, $_;
}
  

Пожалуйста, обратите внимание, что если вы хотите получить точное совпадение, вы должны использовать eq оператор вместо регулярного выражения…

Комментарии:

1. Спасибо за ответ, пьер .. Теперь, если я введу grep в @array, какой результат я получу, поскольку я ожидаю abc