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

drc*_*ber 5 perl split

我有这个奇怪的问题,split因为它默认情况下不会split进入默认数组.

下面是一些玩具代码.

#!/usr/bin/perl

$A="A:B:C:D";
split (":",$A);
print $_[0];
Run Code Online (Sandbox Code Playgroud)

这不会打印任何东西.但是,如果我明确拆分为默认数组,如

#!/usr/bin/perl

$A="A:B:C:D";
@_=split (":",$A);
print $_[0];
Run Code Online (Sandbox Code Playgroud)

它正确打印A.我的perl版本是v5.22.1.

sim*_*que 9

split@_默认情况下不会.@_不起作用$_.它只适用于函数的参数.perlvar说:

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

如果您运行您的程序use strictuse warnings你会看到

在void上下文中使用split无用

但是,如果没有提供任何内容,split则使用$_它作为第二个参数(分割的字符串).但是你必须始终使用返回值.

  • 用于填充`@ _`的void上下文中的`split` (4认同)

Ger*_*ard 5

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

use strict;
use warnings;

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

  • 并且不要调用你的变量`$ a`` @ a` - 无论如何使用单个字母名称是不好的,但尤其是当`sort`使用`$ a`或`$ b`时 (4认同)