如何从可变大小的数组初始化HoH

neb*_*lus 0 arrays perl hash

我需要帮助找出如何适应$ hash {$ i}加载不同大小的@headers数组的情况.用严格; 使用警告;

    my $file = "list.csv";

    open (FILE,"$file") || die "Can't open file: $!\n"; 
    my (@lines) = <FILE>; 
    close(FILE);

    my @headers = split(',',$lines[0]);#split up header line

    my %hash;
    for (my $i=1; $i < scalar(@lines); $i++)
    {
        my @strings = split(',',$lines[$i];

# NEED help here
        $hash{$i} = {
            $headers[0] => $strings[0],
            $headers[1] => $strings[0],
            $headers[2] => $strings[0],
            $headers[3] => $strings[0],
            $headers[4] => $strings[0],
            $headers[5] => $strings[0]
            };

    }
Run Code Online (Sandbox Code Playgroud)

在标量(@headers)= 5,6,7等等的情况下,有没有办法在索引处加载哈希?是否存在类似...的程序等效

$hash{$i} = {
        $headers[0] => $strings[0],
              ...
        $headers[n] => $strings[n]
        };
Run Code Online (Sandbox Code Playgroud)

要么

$hash{$i} = {@headers => @strings);
Run Code Online (Sandbox Code Playgroud)

mar*_*ton 5

你想要的成语是:

@{ $hash{$i} }{ @headers } = @strings;
Run Code Online (Sandbox Code Playgroud)

这称为切片.

鉴于您正在阅读CSV数据,您可能会看到一些CPAN模块,例如Text :: CSV.