【问题标题】:Confused about the variable type of a hash variable in perl对 perl 中哈希变量的变量类型感到困惑
【发布时间】:2020-01-16 10:23:24
【问题描述】:

我从 2 个相同大小的数组创建了一个哈希。一个数组元素用作索引,另一个用作值。 for (my $ele=2;$ele<=$#array1;ele++) {$hash{$array1[$ele]}=$array2[$ele];} 当我用 Dumper 打印它时,它显示类似于以下内容:

$VAR1={'key1'=>'""',
       'key2'=>'"0"',
       'key3'=>'"47.55789"',
       'key4'=> '""',
       'key5'=>'"78.5463"',
       'key6'=>'"0"',
       'key7'=>'""'  };

我需要比较这些值来识别一些键。而且我无法理解我的哈希键指向什么样的值。我试过了,foreach(@array2){ print ref($_);},它没有返回 859 次(两个数组中有 861 个元素。我不想要前 2 个元素)。 looks_like_number($hash{$key}) 失败。而if ref($hash{$key}) eq 'ARRAY' 不是数组。 我是 perl 的新手。一开始我以为,这些值是字符串数组还是本身就是列表的字符串列表?也许?我试图遍历各种可能性,但失败了。它完美地打印了这些值,但我需要比较它们,但我无法达到确切的值。 empty string/0/>50/<50。 任何帮助将不胜感激。

array1 的 Dumper 输出类似于: $VAR1='abc'; $VAR2='ghy'; $VAR3='njkio'; $VAR4='mkol'; array2 的 Dumper 输出:

$VAR1='""';
$VAR2='"0"';
$VAR3='"47.55789"';
$VAR4='""';
$VAR5='"78.5463"';
$VAR6='"0"';
$VAR7='""';  

foreach my $grp(keys %Austin){
  foreach my $val ($Austin{$grp}){
     if(looks_like_number($val)){print "String is a NUMBER\n";}
     else {print "string is Not a number\n";}
  }
}

这个循环的打印输出不是每次都是字符串。我试图理解“76.90”的价值。

【问题讨论】:

  • 这不可能是您的 Dumper 输出,因为哈希键是唯一的。那个 for 循环看起来也不对。您应该包含您的实际代码,如果需要,复制和粘贴,而不是某种随机的但不完全是您实际在做的事情。但是键和值都是纯标量。 ref 返回一个空字符串,因为它们不是引用。
  • 请尝试用没有您原始私人数据的实际代码生成一个最小示例。 for looo 看起来不正确,但我无法用您的虚拟代码片段确认
  • 请举例说明@array1@array2的内容。从 dumper 输出来看,这些值似乎包含在双引号内。如果不显示更多代码,很难说出为什么会发生这种情况
  • @GreenRoad-Dhaka 好的,那么一个简单的解决方案是在将引号插入数组之前删除它们?
  • @GreenRoad-Dhaka 是的,当然你必须自动完成 :) 例如如果 $s = '"abc"' 然后删除 $s =~ s/^"|"$//g 的引号

标签: arrays list perl hash scalar


【解决方案1】:

我不知道我对你的理解是否正确。 试试这个:

my %Austin = (
    "key1"    => '""',
    "key2"    => '"0"',
    "key3"    => '"47.55789"',
    "key4"    => '""',
    "key5"    => '"78.5463"',
    "key6"    => '"0"',
    "key7"    => '""'
);

foreach my $grp(keys %Austin){
    print $grp, "\n";
    foreach my $val ($Austin{$grp}){
        print $val, "\n";
        if($val =~ m/\d/){
            print "String is a NUMBER\n";
        } else { 
            print "string is Not a number\n";
        }
    }
}

【讨论】:

    猜你喜欢
    • 2010-10-19
    • 2016-10-04
    • 2018-03-30
    • 2017-11-11
    • 2017-07-13
    • 1970-01-01
    • 2016-02-01
    • 2017-03-13
    • 1970-01-01
    相关资源
    最近更新 更多