我的Perl DBI->连接失败时连接重新调整错误的值

时间:2014-12-03 18:48:41

标签: oracle perl dbi

我有以下perl代码:

my $dbo_prd = DBI->connect(
    "dbi:Oracle:host=$db_srv_prd;port=1521;sid=$db_sid_prd",
    $db_user_prd,
    $db_pass_prd
) ||  warn &senderror("TREE_STRUCTURE.Could not connect to $db_srv_prd: $DBI::errstr\n");

print "\n\nconnection:" . $dbo_prd . "\n";
if ($dbo_prd != 1){
    print "in prod prepare\n\n";
    my $query1_prd = $dbo_prd->prepare(
        "INSERT INTO CMSV2.CMS_INBOX VALUES (
            'vmsdk', (SELECT SYSDATE from DUAL), 'NODE_TREE_UPDATE',?,?,?,?,NULL,NULL
        )"
    ) || warn &senderror("TREE_STRUCTURE.Could not prepare to $db_srv_prd: $DBI::errstr\n");
}

我遇到的问题是,我认为如果连接不起作用,它会将连接$ dbo_prd设置为undef但它将其设置为1?这不是文档在任何地方陈述的内容。

当连接失败时,连接将被打印为“1”,如果连接失败则连接打印出来。

1 个答案:

答案 0 :(得分:7)

这里有一个优先级错误:

|| warn

这是在连接失败时将warn的返回值赋给变量。请改用:

or warn

(警告,如打印,如果成功则返回1.)

始终使用低优先级and / or来实现基本上不同的表达式之间的流控制;仅在基本上所有一个表达式(例如&&)中使用高优先级|| / my $foo = $bar eq 'a' || $bar eq 'b'