我有一个我想读取的文件,每个位置都有可变数量的 ID,如下所示:
loc1 id1 id4 id5 id9
loc2 id2
loc3 id1 id11 id23
我想按如下方式存储它 locs(loc) = {all ids belonging to that location} 这样一来,当我阅读另一个文件时,我可以做类似的事情
if (grep id, locs(loc)){do something}
我尝试使用散列来执行此操作,但这不起作用。我试过了:
open my $loclist, '<', $ARGV[0];
my %locs;
while (<$loclist>) {
my @loclist_rec = split;
my $loclist_loc = @rlist_rec[0];
$locs{$loclist_loc} = @loclist_rec;
}
但这行不通。 我是 perl 的新手,仍在尝试理解不同的数据类型。
有什么想法吗?非常感谢!
最佳答案
这应该做你想做的。
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
open my $loclist, '<', "test.txt" or die $!;
my %locs;
while (<$loclist>) {
my ($loclist_loc, @loclist_rec) = split;
$locs{$loclist_loc} = \@loclist_rec;
}
print Dumper \%locs;
输出:
$ perl test.pl
$VAR1 = {
'loc2' => [
'id2'
],
'loc1' => [
'id1',
'id4',
'id5',
'id9'
],
'loc3' => [
'id1',
'id11',
'id23'
]
};
关于perl - 如何将可变长度的行分配给perl中的变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21469586/