【发布时间】:2014-08-25 14:28:17
【问题描述】:
我正在重构这个脚本,但我真的不明白我得到的错误。
#!/sbcd/GSD/scripts/perl/bin/perl
use DBI ;
use strict ;
use warnings;
use Data::Dumper;
my $dbUser = 'foo_01';
my $dbPass = 'foo_01';
my $dbSid = 'foo.WORLD';
my $dbh = DBI->connect("dbi:Oracle:$dbSid","$dbUser","$dbPass") or die( "Couldn't connect: $!" );
my %extend_hash=%{@_[0]};
my @error_array=@{@_[1]};
my @queries_array=();
my %spec_hash=();
my $query = "select e_risk_symbol from gsd_etds where level_name='EXCH_CS' and e_exch_dest='XISX' and e_symbol_comment in ('Bin_6','Bin_56')";
if(!$dbh) {
print "Error connecting to DataBase; $DBI::errstr\n";
}
my $cur_msg = $dbh->prepare($query) or die "\n\nCould not prepare statement: ".$dbh->errstr;
$cur_msg->execute();
while (my @row=$cur_msg->fetchrow_array) {
$spec_hash{'XISX'}{$row[0]}=1;
}
print Dumper(%spec_hash);
这些是错误: 我特别不明白不能使用未定义的值作为 HASH 参考
walt $ ./pure_extend_database
Scalar value @_[0] better written as $_[0] at ./pure_extend_database line 11.
Scalar value @_[1] better written as $_[1] at ./pure_extend_database line 12.
Can't use an undefined value as a HASH reference at ./pure_extend_database line 11.
这是我在警告和严格时得到的;
$VAR1 = 'XISX';
$VAR2 = {
'FCEL' => 1,
'GPS' => 1,
'MCO' => 1,
'DPZ' => 1,
'WM' => 1,
'SPLS' => 1,
'ILMN' => 1,
'BWLD' => 1,
'CTSH' => 1,
'EWU' => 1,
'MDVN' => 1,
'PDCO' => 1,
};
【问题讨论】:
-
当你运行脚本时,将什么作为参数传递给脚本?
-
我还没有到达那里 - 一旦我开始传递参数,错误/警告就会消失?
-
通常@_ 数组包含传递给子例程的参数。由于这不在子程序中,因此可能是错误的原因。尝试将 @_ 更改为 @ARGV,然后传递正确的参数。
-
是的 - 真的很想知道它是什么 - 它是子程序数组。
-
该程序从未以您显示的形式编译,因此您没有重构它。你为什么不告诉我们它来自哪里以及你想要实现什么?尝试修复 24 行写得不好的代码真的不值得:你应该写一些遵循规范的新东西。