#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