递归调用子项的Perl变量访问问题

时间:2019-02-06 13:43:46

标签: perl

我需要将数据库转换为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.

0 个答案:

没有答案