将split作为参数传递给splice

时间:2013-02-04 12:15:16

标签: perl

我只需要一个字符串中的前两个名字。

my $myNames = "Jacob, Michael, Joshua, Matthew, Ethan, Andrew";

my $meNewNames = join ( ',',splice( split(/,/,$myNames), 0, 2));

如果有任何错误,请纠正我,否则我们可以用其他方式解决。

print "$meNewNames\n";

它抛出错误。 arg 1到splice的类型必须是数组(不是拆分)

感谢。

3 个答案:

答案 0 :(得分:3)

好吧,就像错误说的那样,第一个参数必须是一个数组。可能的解决方案:

my $meNewNames = join ( ',',splice( [ split(/,/,$myNames) ], 0, 2)); 

从拆分返回值中生成匿名数组引用。但是,这仅适用于perl版本5.14及更高版本。你可以更简单地这样做:

my $meNewNames = join ( ',', (split(/,/,$myNames))[0,1] ); 

使用下标取得拆分的前两个值。在这种风格中,它可能更具可读性:

my @names = split /,\s*/, $myNames;
my $meNewNames = join ',', @names[0,1];

答案 1 :(得分:2)

这更简单:

my $meNewNames = join ( ',', (split(/,/,$myNames))[0,1] );

此外,您可以使用regexpr而不是join / split:

$myNames =~ m!(\w+, *\w+)!;
# $1 => Jacob, Michael;

答案 2 :(得分:1)

你给split一个匿名列表,但你真的需要一个真正的数组。 这是解决这个问题的一种方法:

   my @array = split(/,/,$myNames);
   my $meNewNames = join ( ',',splice( @array, 0, 2));