Perl`split`不会“拆分”为默认数组

时间:2017-05-24 08:47:32

标签: perl split

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。

2 个答案:

答案 0 :(得分:9)

默认情况下,

split不会转到@_@_不像$_那样有效。它只适用于函数的参数。 perlvar说:

  

在子程序中,数组@_包含传递给该子程序的参数。在子程序中,@ _是数组运算符pop和shift的默认数组。

如果您使用use strictuse warnings运行程序,则会看到

  

在void上下文中无用的split

但是,如果没有提供任何内容,split确实使用$_作为其第二个参数(拆分的字符串)。但是你必须总是使用返回值。

答案 1 :(得分:5)

您必须将拆分分配给数组:

use strict;
use warnings;

my $string = "A:B:C:D";
my @array = split(/:/, $string);
print $array[0] . "\n";