Как удалить первые пять элементов массива? - PullRequest
20 голосов
/ 27 февраля 2011
@array = qw(one two three four five six seven eight);
<Some command here>
print @array;

Ответы [ 5 ]

52 голосов
/ 27 февраля 2011

Вот несколько способов, в порядке возрастания немоты:

Использование среза :

@array = @array[ 5 .. $#array ];

Использование splice:

splice @array, 0, 5;

Использование shift:

shift @array for 1..5;

Использование grep:

my $cnt = 0;
@array = grep { ++$cnt > 5 } @array;

Используя map:

my $cnt = 0;
@array = map { ++$cnt < 5 ? ( ) : $_ } @array;

Я уверен, что хакеры намного лучше, чем я могу придумать даже более тупые способы.:)

11 голосов
/ 27 февраля 2011

Вы ищете сращивание встроенный:

splice @array, 0, 5;
4 голосов
/ 27 февраля 2011

splice @array, 0, 5; сделает это.

3 голосов
/ 27 февраля 2011

В качестве комментария к ответу Фридо и для демонстрации классного нового объявления state здесь используется grep, который эмулирует map Фридона.

#!/usr/bin/perl

use strict;
use warnings;

use feature 'state';

my @array = qw(one two three four five six seven eight);

my @new_array = grep {state $count; ++$count > 5} @array;

print "$_\n" for @new_array; 
0 голосов
/ 27 февраля 2011

Я только что понял, что вам нужна только последняя строка, поэтому не нужно зацикливаться

   my $_ = "@array"; s|(?:.*?\s){5}||;say;

Кстати, это, вероятно, наименее эффективный способ сделать это, просто развлекаясь:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...