> Just as a side note... this is really a stylistic or idiomatic argument.

<snip>

Precisely right. That once again is a bad example I guess :) It is just 
dictated by the way all the rest of the error handling is done. For 
example:

sub check_table {
    my ($dbh, $table) = @_;
    $table = lc $table;

    my $tab_ref;

    eval {      my $tb_h = $dbh->table_info ();
                $tab_ref = $tb_h->fetchall_arrayref ();
    }
    or do {
        $ERROR = "Execution of DBI->table_info() failed:\n" . $dbh->errstr;
        return undef;
    };

    unless (grep { ($_->[2] eq $table) and ($_->[3] eq 'TABLE') } @{$tab_ref} ) 
{
        $ERROR = "Table '$table' does not exist";
        return undef;
    }

    my $col_ref;

    eval {      my $cl_h = $dbh->column_info (undef, undef, $table, '%');
                $col_ref =  ($cl_h->fetchall_hashref ('COLUMN_NAME') );
    }
    or do {
        $ERROR = "Execution of DBI->column_info() for '$table' failed:\n" . 
$dbh->errstr;
        return undef;
    };

    my @expected_columns = describe_table ($table);

    if (    (keys %{$col_ref} != scalar @expected_columns)
                or
            (grep { ! defined $col_ref->{$_} } @expected_columns) ) {

        $ERROR = "Layout of '$table' is invalid";
        return undef;
    }

    return 1;
}

So the connect() subroutine which you saw in the previous mail simply 
follows this model, although it is a different animal on the inside. 

Peter

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to