当无法连接时,我的Perl DBI->连接重新调整错误的值

Bos*_*OSX 0 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");
}
Run Code Online (Sandbox Code Playgroud)

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

当连接失败时,连接将被打印为"1",如果成功则连接将被打印出来.

yst*_*sth 7

这里有一个优先级错误:

|| warn
Run Code Online (Sandbox Code Playgroud)

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

or warn
Run Code Online (Sandbox Code Playgroud)

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

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