【问题标题】:Perl hash giving undef valuesPerl 哈希给出 undef 值
【发布时间】:2013-12-26 04:24:17
【问题描述】:

如果尝试使用perl hash 编写一段代码。 __DATA__ 中没有未定义的值或新行(也尝试从文件中提供相同的输入)。但是在使用数据转储器或传统方式打印时,我得到一个 '' 作为键和 undef 作为它的值。为什么会这样?我错过了什么明显的东西吗?

程序:

use strict;
use Data::Dumper;

my %i_hash = undef;
my %p_hash = undef;

while (<DATA>) {
    chomp;
    my @line = split(/\h+/);
    $i_hash{ $line[0] } = $line[1];    # Interactions Hash
    $p_hash{ $line[0] } = $line[2];    # PMIDs Hash

}
print Dumper( \%i_hash, \%p_hash );

__DATA__
AAA     BBB     PMID_1
BBB     AAA     PMID_2
CCC     AAA     PMID_3
DDD     CCC     PMID_4
EEE     FFF     PMID_1
FFF     GGG     PMID_6

输出:

$VAR1 = {
      '' => undef,
      'FFF' => 'GGG',
      'CCC' => 'AAA',
      'BBB' => 'AAA',
      'EEE' => 'FFF',
      'DDD' => 'CCC',
      'AAA' => 'BBB'
    };
$VAR2 = {
      '' => undef,
      'FFF' => 'PMID_6',
      'CCC' => 'PMID_3',
      'BBB' => 'PMID_2',
      'EEE' => 'PMID_1',
      'DDD' => 'PMID_4',
      'AAA' => 'PMID_1'
    };

【问题讨论】:

    标签: perl perl-hash


    【解决方案1】:

    始终使用use warnings;

    my %i_hash = undef;
    my %p_hash = undef;
    

    给予

    Odd number of elements in hash assignment at a.pl line 6.
    Use of uninitialized value in list assignment at a.pl line 6.
    Odd number of elements in hash assignment at a.pl line 7.
    Use of uninitialized value in list assignment at a.pl line 7.
    

    您没有为 value 元素提供值,因此在发出警告后使用 undef

    键是字符串,undef 的字符串化是空字符串,尽管这样做会发出警告。

    你想要:

    my %i_hash;
    my %p_hash;
    

    【讨论】:

    • 谢谢,它正在工作。我通常使用该语法来初始化数组和标量。我对哈希使用了相同的方法。顺便说一句,我什么时候可以使用这种语法。
    • 数组也是个坏主意。 my @array = undef;my @array; $array[0] = undef; 相同。对于标量来说,这只是无用的噪音。这是错误的。
    • @aravindramesh,请注意,当您键入my @array = undef; if ( @array ) {print 'true';} 时,'if' 语句将在此处为真,因为您的数组已经有 1 个元素(未定义)。你会感到惊讶,但你也不应该从 subs 中返回 undef,因为 my @ar = f(); if ( @ar ) {print 'true';} sub f{return undef;} 'if' 出于同样的原因在这里也是如此
    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多