我如何在Perl脚本中访问Shell环境变量

时间:2019-10-31 09:33:30

标签: oracle perl perlscript

我有什么

我有一个Perl脚本,用于检查与oracle数据库的连接。这是我的代码

#!/usr/bin/perl
use DBI;
my $ORACLE_SID =  $ENV{'ORACLE_SID'};
$\="\n";
print "exported variable=$ORACLE_SID";
print "Connecting to DB..";
my $dbh = DBI->connect('dbi:Oracle:host=oracle;sid=$ORACLE_SID;port=1521', 'books_admin/MyPassword', '',{ RaiseError => 1, AutoCommit => 0 })or die print ("could not connect! $DBI::errstr \n");

我已通过export ORACLE_SID=ORCLCDB导出了ORACLE_SID 这段代码的输出是

    exported variable=ORCLCDB
    Connecting to DB..
    DBI connect('host=oracle;sid=$ORACLE_SID;port=1521','books_admin/MyPassword',...) failed: ORA-12505: TNS:listener does not currently know of SID given in connect descriptor (DBD ERROR: OCIServerAttach) at perl.pl line 8. 

似乎Perl拾取了ORACLE_SID,但未在sid = $ ORACLE_SID中使用它。 为什么打印功能可以使用$ ORACLE_SID而sid = $ ORACLE_SID无法获取值

1 个答案:

答案 0 :(得分:4)

print "exported variable=$ORACLE_SID";

这行得通,因为您有一个双引号字符串。然后,变量会用双引号引起来的字符串扩展。

my $dbh = DBI->connect('dbi:Oracle:host=oracle;sid=$ORACLE_SID;port=1521', 'books_admin/MyPassword', '',{ RaiseError => 1, AutoCommit => 0 })or die print ("could not connect! $DBI::errstr \n");

在这里,您的$ORACLE_SID在单引号字符串内。并且变量不会在单引号字符串中扩展。您需要更改:

'dbi:Oracle:host=oracle;sid=$ORACLE_SID;port=1521'

收件人:

"dbi:Oracle:host=oracle;sid=$ORACLE_SID;port=1521"