如何将可变长度的行分配给perl中的变量?

mad*_*eke 3 perl hash

我有一个我想要阅读的文件,每个位置的ID都有可变数量,如下所示:

loc1    id1    id4    id5   id9
loc2    id2 
loc3    id1    id11   id23
Run Code Online (Sandbox Code Playgroud)

我想存储如下locs(loc)= {属于该位置的所有ID}以后,当我读取另一个文件时,我可以做类似的事情

if (grep id, locs(loc)){do something}
Run Code Online (Sandbox Code Playgroud)

我尝试使用哈希来做到这一点,但这不起作用.我试过了:

open my $loclist, '<', $ARGV[0];
my %locs;
while (<$loclist>) {
my @loclist_rec = split;
my $loclist_loc = @rlist_rec[0];
$locs{$loclist_loc} = @loclist_rec;
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我是perl的新手,仍然试图了解不同的数据类型.

有任何想法吗?非常感谢!

chr*_*lck 6

这应该做你想要的.

#!/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;
Run Code Online (Sandbox Code Playgroud)

OUTPUT:

$ perl test.pl
$VAR1 = {
          'loc2' => [
                      'id2'
                    ],
          'loc1' => [
                      'id1',
                      'id4',
                      'id5',
                      'id9'
                    ],
          'loc3' => [
                      'id1',
                      'id11',
                      'id23'
                    ]
        };
Run Code Online (Sandbox Code Playgroud)