Perl - 如何提取数组中除最后一个元素外的所有元素?

13
我需要提取数组中除最后一个元素外的所有元素,并将它们存储在标量中以备后用。 起初,我认为可以使用数组切片来实现,但似乎不能反向计数。 例如:
my $foo = ($bar[0..-2]);  
或者
my $foo = ($bar[-2..0]);  

希望有人能提供帮助,这个问题让我快要发疯了。我在其他地方没有找到解决方案,也尝试了一些实验但仍然无法解决。
Oskar

4个回答

19

my $foo = join ',', @bar[0..$#bar-1];

这段代码会使用逗号将数组@bar除最后一个元素以外的所有元素拼接成字符串,然后将结果存储在变量$foo中。

祝好

rbo


12
my @foo = @bar;
pop @foo;
或者
my @foo = @bar[ -@bar .. -2 ];

或者如果更改@bar没问题,只需

my @foo = splice( @bar, 0, -1 );

谢谢您的快速回复,我会记住这些例子以备后用,它们可能会派上用场。 - Oskar Gibson
1
我认为pop比splice更好,可以删除最后一个元素 :) - brian d foy

2
@foo = @bar[0 .. $#foo - 1];

如果您想创建一个让人费解的问题:
my @x = (1, 2, 3);
print "@x[-@x .. -2]";

2
这将把除最后一个元素外的所有数组元素存储到标量中。每个数组元素之间将用单个空格分隔。
use strict;
use warnings;

my @nums = 1 .. 6;
my $str = "@nums[0 .. $#nums - 1]";
print $str;

__END__

1 2 3 4 5

您不希望将元素存储到另一个数组中吗?如果将它们存储在标量中,则检索它们可能会出现问题。在我上面的示例中,如果数组中的任何元素已经有一个单个空格,则无法从标量正确地重构数组。


1
谢谢你的回复,但是我想将它们存储为标量,因为我想将“名字缩写 姓氏”转换为“姓氏,名字缩写”,并且已经提取了姓氏并在其后添加了逗号,只是无法获取名字和缩写。 - Oskar Gibson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接