这是我的代码:
my %hash=();
while (<DATA>) {
split /\=|,/;
$hash{$_}++;
}
map{print "$_ == > $hash{$_}\n"} sort keys %hash;
__DATA__
1=2,3,4
a=1,1,5
我不知道为什么警告我: 在get_path.pl第11行的void上下文中无用的split。“
我应该如何更改代码以避免此警告? 谢谢~~~~~
答案 0 :(得分:4)
你没有做任何与分裂的返回值;在'$ hash {$ _}'中使用的$ _是从DATA读取的行:
while循环后的哈希是:
%hash = (
'1=2,3,4
' => 1,
'a=1,1,5
' => 1
);
还要注意按键末尾的新行。
编辑:问题已更新评论: “这个脚本打算计算相同的项目。这些项目由=或, - ”
分隔执行此操作的方法是将while循环修改为:
while (<DATA>) {
chomp ;
foreach(split /\=|,/){
$hash{$_}++;
}
}
split返回'='或','上的数组拆分 - 然后循环,并且对该值加密的哈希值递增
答案 1 :(得分:3)
如果您要计算DATA中任何字符串的出现次数,那么以下内容将按您的意愿执行。需要将split的返回返回到数组,然后才能处理该数组。你可以在一行中完成循环,但这种方式更详细。
use strict;
use warnings;
use Data::Dumper;
my %hash=();
while (<DATA>) {
chomp;
my @arr = split /\=|,/;
map {$hash{$_}++} @arr;
}
print Dumper \%hash;
$VAR1 = {
'4' => 1,
'1' => 3,
'a' => 1,
'3' => 1,
'2' => 1,
'5' => 1
};
要在一行中执行此操作
map {$hash{$_}++} split /[=,\n]/, while <DATA>;