我有以下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”,如果连接失败则连接打印出来。
答案 0 :(得分:7)
这里有一个优先级错误:
|| warn
这是在连接失败时将warn的返回值赋给变量。请改用:
or warn
(警告,如打印,如果成功则返回1.)
始终使用低优先级and
/ or
来实现基本上不同的表达式之间的流控制;仅在基本上所有一个表达式(例如&&
)中使用高优先级||
/ my $foo = $bar eq 'a' || $bar eq 'b'
。