perl - Perl 中散列键的子集

标签 perl hash

我发现自己正在编写一个 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不是散列而是引用(我说得对吗?),所以我不太清楚如何实现我需要的。感谢一些帮助!谢谢!

最佳答案

通常,您可以在任何语法中使用引用(或产生引用的表达式),方法是将变量名替换为 {} 中的引用。堵塞。所以:

@hash{qw(header_one header_two)}

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

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

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

但这只是一个返回两个值的哈希切片;如果您需要键/值列表,请改用键/值切片(perl 5.20 中的新功能):
my %slice = %$row{qw(header_one header_two)};

关于perl - Perl 中散列键的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55127551/

相关文章:

perl - 如何使用 MOSS 脚本?

python - 散列 [1,9] 有序排列的最佳方法

perl - 从 Perl 中的 carp 模块覆盖 croak cluck confess carp

Perl:用单个方法重新定义父类的所有方法

Perl脚本从多个txt文件中读取和打印行?

perl - 从 CPAN 使用稍微修改模块的最佳实践?

php - 我的身份验证加密有什么好处吗?

c# - 散列和加盐密码字段

c# - 更快的 MD5 替代品?

linux - md5/sha1 散列大文件