Как извлечь подмножество @_? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть следующая функция, которая работает.Но я не уверен, что это лучший способ извлечь подмножество @_.Как извлечь подмножество из @_ наилучшим образом?

sub parseheader {
  my $grps_len = shift;
  my @grps;

  for ( my $i = 0; $i < $grps_len; ++$in) {
    my $x = shift;
    print "$x\n";
    push(@grps, $x);
  }

  return join(",", @grps), "\n";
}

print parseheader(3, "a", "b", "c");

Ответы [ 2 ]

0 голосов
/ 08 июня 2018

Используйте список или фрагмент массива.

sub parseheader { join(",", @_[ 1 .. $_[0] ]) . "\n" }

print parseheader(3, @things);

, но я бы использовал

sub take_first { @_[ 1 .. $_[0] ] }

say join ",", take_first(3, @things);

Если вы хотите удалить возвращенные элементы, вы можете использовать splice.

say join ",", splice(@things, 0, 3);

Кстати,

for (my $i=0; $i < $grps_len; ++$i)

- медленный и сложный способ написания

for my $i (0..$grps_len-1)
0 голосов
/ 08 июня 2018

С фрагментом массива:

my @grps = @_[0..($grps_len-1)];
...