Perl:过滤 AoH 输出

Perl: Filter AoH output

我正在尝试整理我的 AoH,如下所示:

$VAR1 = [
              {
                'Name' => 'John',
                'Lastname' => 'Derp',
                'Organization' => 'Finance',
                'OfficeNR' => '23',
                'ID' => '145'
              },
              {
                'Name' => 'Kate',
                'Lastname' => 'Herp',
                'Organization' => 'HR',
                'OfficeNR' => '78',
                'ID' => '35'
              },
              {
                'Name' => 'Jack',
                'Lastname' => 'Serp',
                'Organization' => 'Finance',
                'OfficeNR' => '23',
                'ID' => '98'
              }
       ];

我想做的是使用 AoH 中的键过滤我的输出,例如只打印出那些 'Organization' => 'Finance'.

我尝试使用新数组来解决它:

my @SortedAoH = sort { {Organization=>{'Finance'}} } @AoH;

但是不行。

你想要的是grep,而不是sort。你也得到了等价检查的基本语法错误。

无论如何,过滤器是:

my @finance_orgs = grep { $_->{'Organization'} eq 'Finance' } @AoH;

@finance_orgs 变量现在将仅包含 Organization 设置为 Finance 的变量。

只是对作品的解释:

  • $_ 变量是在块中隐含值时被赋值的变量,例如在 grepmapfor 循环中没有明确命名的变量。
  • $_->{'Organization'} 在遍历数组中的每个条目时对哈希执行哈希查找。
  • eq 是用于测试字符串等价性的运算符(与测试数字等价性的 == 相反)。