2015-08-06 2 views
0

Это наш массив:Удалить значения в массиве

my @array = ('?C=N;O=D', 
'?C=M;O=A', 
'?C=S;O=A', 
'?C=D;O=A', 
'/lab/blog/wp-content/', 
'1-list.txt', 
'2014/', 
'2015/', 
'rbxslider/', 
'slideshow-gallery/', 
'uigen_2015/' 
); 

как удалить все значения перед </lab/blog/wp-content/> значением

shift @list until (shift (@list)=~m/wp-contnet/); 

я пытался с этим способом, но без результата

+0

Куда вы попадаете в этот массив. Похоже, вы что-то разбираете. – Sobrique

ответ

0

You» re close, когда вы используете правильное имя массива и исправляете опечатку в «wp-content», но это не включает элемент «wp-content», который выглядит так, как будто вы хотите сделать. Следующие проверки первый элемент перед переключением, а не сдвигая его, а затем проверить его:

if (grep /wp-content/, @array){ 
    shift @array until $array[0] =~ /wp-content/; 
} 

print "$_\n" for @array; 

Выход:

/lab/blog/wp-content/ 
    1-list.txt 
    2014/ 
    2015/ 
    rbxslider/ 
    slideshow-gallery/ 
    uigen_2015/ 
+0

, который будет бесконечно циклически, если он не найдет строку в любом элементе – ysth

+0

Nice catch. Благодаря! – stevieb

0
my $count = 0; 
my @keep; 
foreach (@array){ 
    $count++ if m|/lab/blog/wp-content/|; 
    push @keep, $_ if $count > 0; 
} 
say foreach @keep; 

/lab/blog/wp-content/ 
1-list.txt 
2014/ 
2015/ 
rbxslider/ 
slideshow-gallery/ 
uigen_2015/ 
2

Другой способ:

@array = grep /wp-content/../(?!)/, @array; 
+0

Как это работает? Какова цель '(?!)' Например? –

+1

использует '..' в качестве оператора флипфлопа; он возвращает false до тех пор, пока левый операнд не будет истинным, тогда true, пока правый операнд не будет истинным. '/ (?!) /' - это просто произвольное регулярное выражение, которое всегда ложно. вы не можете просто сказать '/ foo/.. 0', потому что если один из операндов является константой (или сворачивается к константе), он неявно выполняет сравнение с' $ .', как если бы вы сказали '/ foo /..($.== 0) '. – ysth

+0

это впечатляет .. никогда не перешагивал мой разум :) –

1

Закрыть.

shift @array until $array[0] =~ /wp-content/; 

Или, если есть шанс, что не может быть ничего, чтобы удалить,

while ($array[0] !~ /wp-content/) { shift @array; } 

Вы можете убедиться, что вы не цикл навсегда.

while (@array && $array[0] !~ /wp-content/) { shift @array; } 
Смежные вопросы