为什么我使用SQL从Perl获得奇怪的输出?

时间:2010-05-06 09:22:26

标签: perl unix

这是我的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

2 个答案:

答案 0 :(得分:4)

您应该在代码顶部添加以下行:

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

答案 1 :(得分:3)

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