如何避免Perl中的“无用的拆分空间上下文”警告?

时间:2012-05-02 11:50:33

标签: perl hash split

这是我的代码:

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。“

我应该如何更改代码以避免此警告? 谢谢~~~~~

2 个答案:

答案 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>;