Perl中的散列键子集

问题描述 投票:4回答:1

我发现自己编写一个Perl脚本作为我正在使用的特定格式的库只适用于这种语言。该脚本读取CSV文件并将数据保存为专有格式。我只需要保存特定的列,而不是整个数据集,所以我想方法使用以下代码按列名访问列。

my $file = "test.csv";
open my $fh, "<", $file or die "$file: $!";

my $csv = Text::CSV->new ({
  binary    => 1, # Allow special character. Always set this
  auto_diag => 1, # Report irregularities immediately
  });
$csv->column_names ($csv->getline ($fh)); # use header
while (my $row = $csv->getline_hr ($fh)) {
  print $row->{column_name};
}

在while循环中,我想获得一个只有我需要的列的哈希,而不是整个记录。我想有一种方法可以用哈希这样做:

@hash{qw(header_one header_two)}

但在我的情况下,$row不是哈希,而是参考(我是否正确?),所以我无法弄清楚如何实现我需要的东西。感谢一些帮助!谢谢!

perl hash
1个回答
2
投票

通常,您可以通过将变量名替换为{}块中的引用,以任何语法使用引用(或生成引用的表达式)。所以:

@hash{qw(header_one header_two)}

将会

@{$row}{qw(header_one header_two)}

要么

@$row{qw(header_one header_two)}

(如果引用是一个简单的标量变量,则可以省略{})。

但这只是一个返回两个值的哈希片;如果你想要一个键/值列表,请使用键/值切片(perl 5.20中的new):

my %slice = %$row{qw(header_one header_two)};
© www.soinside.com 2019 - 2024. All rights reserved.