我只需要一个字符串中的前两个名字。
my $myNames = "Jacob, Michael, Joshua, Matthew, Ethan, Andrew";
my $meNewNames = join ( ',',splice( split(/,/,$myNames), 0, 2));
如果有任何错误,请纠正我,否则我们可以用其他方式解决。
print "$meNewNames\n";
它抛出错误。 arg 1到splice的类型必须是数组(不是拆分)
感谢。
答案 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));