【问题标题】:Subset of hash keys in PerlPerl 中的哈希键子集
【发布时间】:2019-03-13 04:06:42
【问题描述】:

我发现自己编写了一个 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 来做这件事,那么你的代码真的非常好,而且你已经完成了你的功课。很高兴看到这样的问题。 :)

标签: perl hash


【解决方案1】:

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

@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)};

【讨论】:

    猜你喜欢
    • 2016-01-28
    • 2011-04-12
    • 2011-10-27
    • 1970-01-01
    • 2013-01-01
    • 2017-09-04
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多