如何自动增加Perl哈希值?

joe*_*joe -2 perl hash

数据库数据:

Passport_No  Bank      statement_no   Credit_id 

4126897     HSBC       2948608         0
4126897     HSBC       2948609         1   
4126858     HSBC       2948591         0  
4126858     barclays   2948595         0
4126858     barclays   2948596         1
4126858     barclays   2948597         2  
Run Code Online (Sandbox Code Playgroud)

信用ID基于银行.

Credit_id(我需要填写)0,1,2,3,4

我试图像这样自动化

 if ($credit{$passport_no}{$bank}) { 
    $credit{$passport_no}{$bank}->{$statement}++;
 } else { 
        $credit{$passport_no}{$bank}->{$statement} = 0;
 } 
Run Code Online (Sandbox Code Playgroud)

我得到了外面的东西:

VAR1 = '4126897';
$VAR2 = {
          'HSBC' => {
                        '2948608' => 0,
                        '2948609' => '1'
                      }
        };
$VAR3 = '4126858';
$VAR4 = {
          'HSBC' => {
                           '2948591' => 0
                         },
          'barclays' => {
                               '2948595' => 0,
                               '2948596' => '1',
                               '2948597' => '1'
                             }
        };
Run Code Online (Sandbox Code Playgroud)

但我一直在寻找

VAR1 = '4126897';
$VAR2 = {
          'HSBC' => {
                        '2948608' => 0,
                        '2948609' => 1
                      }
        };
$VAR3 = '4126858';
$VAR4 = {
          'HSBC' => {
                           '2948591' => 0
                         },
          'barclays' => {
                               '2948595' => 0,
                               '2948596' => 1,
                               '2948597' => 2
                             }
        };
Run Code Online (Sandbox Code Playgroud)

怎么解决这个?

Hyn*_*dil 5

非常简单,您应该保存与索引分开的自动增量.

use strict;
use warnings;
use Data::Dumper;

my ( %counts, %credit );
while (<DATA>) {
    my ( $passport_no, $bank, $statement ) = split / /;
    $credit{$passport_no}{$bank}{$statement} = $counts{$passport_no}{$bank}++;
}

print Dumper( \%credit );

__DATA__
4126897 HSBC 2948608 0
4126897 HSBC 2948609 1
4126897 barclays 2948610 0
4126897 barclays 2948611 1
4126897 barclays 2948612 2
4126897 SBI 2948613 0
4126897 SBI 2948614 1
4126897 SBI 2948615 2
Run Code Online (Sandbox Code Playgroud)