数据库数据:
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)
怎么解决这个?
非常简单,您应该保存与索引分开的自动增量.
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)