sub LHCC { DECISION: while( 1 ) { WelcomeMsg(); my $decision = GetDecision(); if( $decision =~ /quit/ ) { last DECISION; } elsif( $decision =~ /ready/ ) { GoDoReadyDecision(); } else { TryAgainMessage(); } } } ## end sub LHCC sub GoDoReadyDecision { my $no_statements = GetNoStatements(); ...; GetQPStatements( \%Statements ); ...; my( $conclusions, $o_conclusions ) = ConcludeConclusions( \%Statements, \%Contrapositives ... ); return $conclusions, $o_conclusions; } ## end sub GoDoReadyDecision sub ConcludeConclusions { my( $Statements, $Contrapositives ) = @_; while( my( $key, $value ) = each %$Statements ) { ...; } for my $key ( keys %$Contrapositives ) { my $value = $Contrapositives->{$key}; ...; } ...; return \@Conclusion, \@OtherConclusion; } ## end sub ConcludeConclusions