【问题标题】:Why do I get strange output from Perl using SQL?为什么我使用 SQL 从 Perl 得到奇怪的输出?
【发布时间】:2010-05-07 17:46:27
【问题描述】:

这是我的 Perl 代码:

foreach my $line  (@tmp_field_validation)
{
        chomp $line;
        my ($cycle_code,$cycle_month,$cycle_year)= split /\s*\|\s*/, $line;
        $cycle_code=~ s/^\s*(.*)\s*$/$1/;
        $cycle_month=~ s/^\s*(.*)\s*$/$1/;
        $cycle_year=~ s/^\s*(.*)\s*$/$1/;
        print "$line\n";
        print "$cycle_code|$cycle_month|$cycle_year";
}

这是输出:

         1          10       2009
1           10       2009||

这里怎么了? 我希望管道位于变量之间。为什么在所有三个变量之后都打印管道?

编辑: tmp_field_validation 是一个 sql 查询的输出,它有如下的 select 语句:

select cycle_code,cycle_month,cycle_year from ....

所以当我在 TOAD 中执行查询时,输出将显示为 3 个不同的列。但是在此脚本中使用相同的查询时,输出怎么可能被视为单个字段 cycle_code

【问题讨论】:

    标签: perl unix


    【解决方案1】:

    您应该将以下行添加到代码的顶部:

    use warnings;
    

    或者,如果您已经拥有它,您应该注意收到的警告消息。其他人已经正确指出您的输入行没有任何文字管道。我想你真的想要这样的东西:

    use strict;
    use warnings;
    
    my @tmp_field_validation = ("         1          10       2009\n");
    
    foreach my $line  (@tmp_field_validation)
    {
            chomp $line;
            $line =~ s/^\s*//;
            my ($cycle_code,$cycle_month,$cycle_year)= split /\s+/, $line;
            print "$line\n";
            print "$cycle_code|$cycle_month|$cycle_year";
    }
    

    输出以下内容:

    1          10       2009
    1|10|2009
    

    【讨论】:

      【解决方案2】:

      因为整行都存放在 $cycle_code 变量中。其他两个变量是空字符串。

      【讨论】:

      • 这实际上是一个完全正确的答案,但提及它发生的 原因 会有所帮助,因为拆分位于垂直垂直条上(由可选空格包围) ,并且输入中没有竖线。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-08-12
      • 1970-01-01
      • 2021-06-22
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多