我需要将数据库转换为SQL。我在perl上写它。在这里:
P.S。简化
#!/usr/bin/perl
use utf8;
use strict;
use warnings;
my @tables = (
['clients', ['id'], 'id', '',
[['accounts', ['id'], '', 'id_client', 0]]
]
);
sub ProcessTables {
my ($tbl, $id_value) = @_;
my ($i, $i2, $sth);
my @arr;
my $arr_count = $#$tbl;
for ( $i=0; $i<=$arr_count; $i++ ) {
if ( $tbl->[$i]->[4] != 0) {
@arr = @{$tbl->[$i]->[4]};
ProcessTables( \@arr, 'blablalba' );
};
}
};
ProcessTables(\@tables);
当我第二次(通过@arr = ....行之后)通过传递的参数并访问它们时,没有任何问题。一切都光滑而美丽。一切都在“ if($ tbl-> [$ i]-> [4]!= 0)”行上发生根本变化。之后,看来我没有去过这里。所有变量均指的是我第一次进入此过程时看到的数据。在调用“ if”之前,所有链接均指向带有数据“ accounts”的数组。通话后,他们开始再次指向“客户”。 请告诉我怎么回事?为什么会发生?
P.S。我在linux下调试它。输出为:
DB<2>
main::ProcessTables(TestRecurce2.pl:19):
19: my $arr_count = $#$tbl;
DB<2>
main::ProcessTables(TestRecurce2.pl:20):
20: for ( $i=0; $i<=$arr_count; $i++ ) {
DB<2>
main::ProcessTables(TestRecurce2.pl:21):
21: if ( $tbl->[$i]->[4] != 0) {
DB<2> p $tbl
ARRAY(0x5593be5baba0)
DB<3> p $tbl->[$i]
ARRAY(0x5593be5fbf78)
DB<4> p $tbl->[$i]->[4]
0
DB<5> n
Debugged program terminated. Use q to quit or R to restart,
use o inhibit_exit to avoid stopping after program termination,
h q, h R or h o to get additional info.