我有一个函数可以将Excel数据提取到一个哈希数组中,如下所示:
sub set_exceldata {
my $excel_file_or = '.\Excel\ORDERS.csv';
if (-e $excel_file_or) {
open (EXCEL_OR, $excel_file_or) || die("\n can't open $excel_file_or: $!\n");
while () {
chomp;
my ( $id, $date, $product, $batchid, $address, $cost ) = split ",";
my %a = ( id => $id
, date => $date
, product => $product
, batchid => $batchid
, address => $address
, cost => $cost
);
push ( @array_data_or, \%a );
}
close EXCEL_OR;
}
}
填充哈希数组很好。但是,困难的部分是在数组中搜索特定项(哈希)。我似乎无法找到可能具有id或21,或batchid为15或成本>的项目。 20美元等。
我如何实施这样的搜索工具?
感谢所有人,
答案 0 :(得分:20)
拥有grep
的力量my @matching_items = grep {
$_->{id} == 21
} @array_data_or;
如果您知道只返回一件商品,您可以这样做:
my ($item) = grep {
$_->{id} == 21
} @array_data_or;
(未经测试,我暂时没有写过其中一篇,但这应该有效)
答案 1 :(得分:5)
如果您确定搜索始终只返回一次,或者您只对第一次匹配感兴趣,那么您可以使用List::Util中找到的“第一个”子程序
use List::Util;
my %matching_hash = %{ first { $_->{id} == 21 } @array_data_or };
我将子程序调用包含在%{} 块中,以确保RHS评估为哈希值。