【问题标题】:Same Perl script running fine in DEV and Failing in QA相同的 Perl 脚本在 DEV 中运行良好但在 QA 中失败
【发布时间】:2014-01-29 23:20:20
【问题描述】:

我有一个 perl 脚本,它读取一个文件并将读取的文件内容写入另一个文件。奇怪的是,代码在 DEV 环境中执行良好,但由于错误而失败 在 /ms/dist/msamg/PROJ/agcis/qa/perl/acd_pas_model_accounts.pl 第 183 行第 4 行打印中使用未初始化的值 $ofh

请指教。

下面是perl代码的sn-p:

    my @filetomail = ("$opt->{RptDir}pas_acct_model_rtp.csv");
    my $ofh = new IO::File "$opt->{RptDir}/pas_acct_model_rtp.csv", "w";
    print $ofh;
    unless (defined $ofh) {
    $log->log (MSLogErr, "Error open file");
    program_exit(6);
    }

【问题讨论】:

  • QA 环境中很可能的权限/配置(未在您的 sn-p 中显示)。 $opt->{RptDir} 填充了什么?此外,您的 @filetomail 变量与您打开的路径不同 - 这意味着如果您有旧版本的文件挂在以前的测试中,它可能在您的测试中有效,但实际上是一个错误(因此 QA 工作正确!)
  • print $ofh 没有意义,如果您还没有验证它是否像您在下一行中定义的那样。

标签: perl


【解决方案1】:

您的问题不在于 IO::File,而在于文件名的构建。在使用它打开文件之前构建文件名字符串并将其分配给变量总是一个好主意。这样,您可以打印它以验证它是否是您所期望的,并且通过使用该变量,您可以避免多次构建字符串,并且可以确定您正在打印的内容与您用来打开的内容相同文件。它还可以使您的代码更干净。考虑以下两个选项:

my $ofh = new IO::File "$opt->{RptDir}/pas_acct_model_rtp.csv", "w";

my $file_name = "$opt->{RptDir}/pas_acct_model_rtp.csv";
print "File name: '$file_name'\n";
my $ofh = IO::File->new($file-name, "w");

PBP 建议将变量的插值用单引号括起来,以进一步确保您看到的是字符串的真实值。这种方法将突出显示前面或后面的空格等内容。

您可能还需要检查 $opt。 Data::Dumper 是你的朋友。好朋友。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-09
    • 2014-12-16
    • 2017-07-23
    • 1970-01-01
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    相关资源
    最近更新 更多