此代码触发以下投诉:
#!/usr/bin/perl
use strict;
use warnings;
my $s = "aaa bbb";
my $num_of_item = split(/\s+/, $s) ;
print $num_of_item;
Run Code Online (Sandbox Code Playgroud)
当我运行代码时,Perl抱怨" Use of implicit split to @_ is deprecated".我真的没有问题的"背景",所以我希望你能帮助解释代码的错误.
Eug*_*ash 33
您正在split标量上下文中使用,并且在标量上下文中它将分割为@_数组.Perl警告你,你可能刚刚破坏了@_.(有关更多信息,请参阅perldoc拆分.)
要获取字段数,请使用以下代码:
my @items = split(/\s+/, $s);
my $num_of_item = @items;
Run Code Online (Sandbox Code Playgroud)
要么
my $num_of_item = () = split /\s+/, $s, -1;
Run Code Online (Sandbox Code Playgroud)
注意:split()的三参数形式是必要的,因为没有指定限制,split只会拆分一个(比赋值中所需的多一个).
too*_*lic 15
让诊断提供更多信息:
use strict;
use warnings;
use diagnostics; # comment this out when you are done debugging
my $s = "aaa bbb";
my $num_of_item = split(/\s+/, $s) ;
print $num_of_item;
Run Code Online (Sandbox Code Playgroud)
不推荐使用隐式拆分为@_
(D弃用,W语法)当你破坏子程序的参数列表时,它为编译器做了很多工作,所以如果你明确地将split()的结果分配给一个数组(或列表),它会更好.
获取诊断信息的更好方法是从命令行:
perl -Mdiagnostics my_program.pl
Run Code Online (Sandbox Code Playgroud)