在perl中从数组创建哈希

时间:2016-10-24 03:26:50

标签: arrays perl hash

我有一个我想要转换为哈希表的数组。基本上,我希望@array[0]是哈希的键,@array[1]是哈希的值。在perl中有一个简单的方法吗?我到目前为止的代码如下:

#!/usr/bin/perl
use warnings;
use strict;
use diagnostics;

unless( open(INFILE, "<", 'scratch/Drosophila/fb_synonym_fb_2014_05.tsv')) {
die "Cannot open file for reading: ", $!;

while(<INFILE>) {
my @values = split();
#convert values[0] to keys, values[1] to values
}

该文件可供下载here

1 个答案:

答案 0 :(得分:3)

@array[0](一个数组切片,用于返回多个元素)是一种编写$array[0]的错误方法(数组查找,用于返回单个元素)。 use warnings;会告诉你这个。

要设置哈希元素,请使用

$hash{$key} = $val;

所以代码变成了

my %hash;
while (<>) {
    chomp;
    my @fields = split /\t/;
    $hash{ $fields[0] } = $fields[1];
}

更好的是,

my %hash;
while (<>) {
    chomp;
    my ($key, $val) = split /\t/;
    $hash{$key} = $val;
}

文件的名称意味着字段是以制表符分隔的,而不是以空格分隔,所以我切换了

split ' '

split /\t/

这需要添加chomp