Hello Monks,
It seems I got some kind of Heisenbug. In my code, there seems to be something wrong, but I can not track it down by debuging. I got a working peace of code. Now, as I want to extend the functionality it seems that variables turning to be defined / undefined depending if going into and return from a subfunction.
It looks like this:
package DATABASE_ANALYSIS; use strict; use warnings; use diagnostics; use DBI qw(:sql_types); use DBD::SQLite; use ITF::ErrorHandling; use vars qw($VERSION $HEADER @ISA @EXPORT); use Exporter; $VERSION = q$Revision: 0.0.1 $; $HEADER = q$Header: DATABASE_ANALYSIS$; @ISA = qw(Exporter); @EXPORT = qw( ConnectToDatabase($) GetDBContent Disconnect GetParent ResolveContainer ); my ( $comp_by_pac, $container_by_pac, $containers, $src_by_comp, $src_by_test, $xml_structure, $analyzed_comps, $root_dir, $project_root, $PAC_by_Id, $COMP_by_Id, $TEST_by_Id, $COMPs_by_Name, $REL_by_Parent, $REL_by_Child, $dbh ); sub ProcessContainers { my $start_container = $_[0]; my $container; #Process PAC or COMP if given. if ( not defined $start_container ) { $start_container = $PAC_by_Id->{1}{'Name'}; } #If no token is given on command line, then the project name is #taken as standard token - script dies in case it does not exist die "Could not find Project name, try to provide project name (PAC) as tok +en! --token=MyProjectName " if ( not defined $start_container ); #Resolve all subsequent appearing PAC and STCOMP to COMPS #Background: COMPS can directly resolved to SourceFiles # 1. Get starting contianer # 2. Resolve subsequent containers if ( exists $container_by_pac->{$start_container} ) { $container = ${ $container_by_pac->{$start_container} }; } elsif ( exists $containers->{$start_container} ) { $container = $containers->{$start_container}; } #Add to xml structure $xml_structure->{$start_container} = $container; ResolveContainers($container); } sub ResolveContainers { my $start_container = $_[0]; goto COMPPROCESSING if ( ref $start_container eq 'HASH' ); foreach my $item ( @{$start_container} ) { if ( ( $item->[1] eq 'PAC' ) or ( $item->[1] eq 'STCOMP' ) ) { #Recursive analysis ResolveContainers( ${ $container_by_pac->{ $item->[0] } } +); } else { #Add Element to comps list $analyzed_comps->{ $item->[0] } = $item; } } return; COMPPROCESSING: #Add Element to comps list $analyzed_comps->{ $start_container->{'Name'} } = $start_container +; return; }
However, once in the called ResolveContainer sub I assign the parameter which is listed as undef to the $start_container variable. It works perfect. There are all expected values. How comes it that way?
Any help is appreciated!
Best regards! Tobias
In reply to package variables turning suddenly to undef and back again depending on subfunction call by tobias_hofer
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |