我有以下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",如果成功则连接将被打印出来.
这里有一个优先级错误:
|| 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').