【发布时间】:2019-10-31 06:35:06
【问题描述】:
我对 Perl 完全陌生。我有一个 Perl 脚本,它检查与容器中运行的 oracle 数据库的连接。这是我的代码
#!/usr/bin/perl
use DBI;
$\="\n";
print "Connecting to DB..";
my $dbh = DBI->connect('dbi:Oracle:host=oracle;sid=ORCLCDB;port=1521', 'books_admin/MyPassword', '',{ RaiseError => 1, AutoCommit => 0 })or die print ("could not connect! $DBI::errstr \n");
使用这个脚本,我可以连接到 oracle 数据库。但是这个脚本没有向我的终端提供任何状态输出。如何检查脚本是否连接到数据库?我知道 bash 有 $?用于检查先前执行的 cmd 的状态。我们在 Perl 中有类似的东西吗?
这就是我想要的 连接OK时输出“Successfully connected to Oracle-db”,脚本无法连接数据库时输出失败状态
注意:此代码向我的终端提供错误状态。 我的 Perl 版本是 v5.16.3
【问题讨论】:
-
如果您将命令放在
eval块中,您可以使用$@捕获输出——参见perldoc.perl.org/functions/eval.html -
细读perlvar 以获得各种好东西(其中
$?)。否则,它取决于库/函数(等)及其行为方式;因此,请阅读文档以了解他们在失败时会做什么,然后使用它。此外,复杂的库(如DBI)通常有特定的方法来查询状态。 -
@richyen
eval块和$@如果块中的代码抛出异常 (dies) 很有用,因为我们得到了控制权(程序没有终止) ;异常被“捕获”。如果没有引发异常,$@中应该没有任何内容,因此它不能用于对先前命令状态的一般查询(参见Error Variables in perlvar)。许多(大多数)库不会在错误时抛出(die),但(可能)设置$?(可能还有其他相关的全局变量,请参阅perlvar)并可能返回代码。
标签: oracle perl perlscript