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。
答案 0 :(得分:9)
split
不会转到@_
。 @_
不像$_
那样有效。它只适用于函数的参数。 perlvar说:
在子程序中,数组@_包含传递给该子程序的参数。在子程序中,@ _是数组运算符pop和shift的默认数组。
如果您使用use strict
和use warnings
运行程序,则会看到
在void上下文中无用的split
但是,如果没有提供任何内容,split
确实使用$_
作为其第二个参数(拆分的字符串)。但是你必须总是使用返回值。
答案 1 :(得分:5)
您必须将拆分分配给数组:
use strict;
use warnings;
my $string = "A:B:C:D";
my @array = split(/:/, $string);
print $array[0] . "\n";