1

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

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

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

如果其中有任何问题,请纠正我,或者我们可以通过其他方式实现它。

print "$meNewNames\n";

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

谢谢。

4

3 回答 3

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];
于 2013-02-04T12:19:33.947 回答
2

这更简单:

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

此外,您可以使用正则表达式而不是加入/拆分:

$myNames =~ m!(\w+, *\w+)!;
# $1 => Jacob, Michael;
于 2013-02-04T12:22:12.317 回答
1

您正在为 提供一个匿名列表split,但您确实需要一个真正的数组。这是解决此问题的一种方法:

   my @array = split(/,/,$myNames);
   my $meNewNames = join ( ',',splice( @array, 0, 2));
于 2013-02-04T12:21:09.887 回答