我只需要字符串中的前两个名称。
my $myNames = "Jacob, Michael, Joshua, Matthew, Ethan, Andrew";
my $meNewNames = join ( ',',splice( split(/,/,$myNames), 0, 2));
如果其中有任何问题,请纠正我,或者我们可以通过其他方式实现它。
print "$meNewNames\n";
它抛出错误。要拼接的 arg 1 的类型必须是数组(不拆分)
谢谢。
我只需要字符串中的前两个名称。
my $myNames = "Jacob, Michael, Joshua, Matthew, Ethan, Andrew";
my $meNewNames = join ( ',',splice( split(/,/,$myNames), 0, 2));
如果其中有任何问题,请纠正我,或者我们可以通过其他方式实现它。
print "$meNewNames\n";
它抛出错误。要拼接的 arg 1 的类型必须是数组(不拆分)
谢谢。
好吧,就像错误所说的那样,第一个参数必须是一个数组。可能的解决方案:
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];
这更简单:
my $meNewNames = join ( ',', (split(/,/,$myNames))[0,1] );
此外,您可以使用正则表达式而不是加入/拆分:
$myNames =~ m!(\w+, *\w+)!;
# $1 => Jacob, Michael;
您正在为 提供一个匿名列表split
,但您确实需要一个真正的数组。这是解决此问题的一种方法:
my @array = split(/,/,$myNames);
my $meNewNames = join ( ',',splice( @array, 0, 2));