split有一个奇怪的问题,因为它在默认情况下不会将split放入默认数组中。
下面是一些玩具代码。
#!/usr/bin/perl
$A="A:B:C:D";
split (":",$A);
print $_[0];这个不印任何东西。但是,如果我显式地拆分为默认数组,如
#!/usr/bin/perl
$A="A:B:C:D";
@_=split (":",$A);
print $_[0];它正确地打印了A。我的perl版本是v5.22.1。
发布于 2017-05-24 08:52:01
默认情况下,split不会转到@_。@_不像$_那样工作。它只适用于函数的参数。珀尔瓦说:
在子例程中,数组@_包含传递给该子例程的参数。在子例程中,@_是数组操作符弹出和移位的默认数组。
如果您使用use strict和use warnings运行您的程序,您将看到
空上下文中的拆分的无用用法
但是,如果不提供任何内容,split确实使用$_作为其第二个参数(被拆分的字符串)。但是,您必须始终将返回值用于某些内容。
发布于 2017-05-24 08:55:41
您必须将拆分分配给一个数组:
use strict;
use warnings;
my $string = "A:B:C:D";
my @array = split(/:/, $string);
print $array[0] . "\n";https://stackoverflow.com/questions/44153397
复制相似问题