2010-05-06 48 views
2

这里是我的Perl代码:为什么我使用SQL获得奇怪的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 cycle_code,cycle_month,cycle_year from .... 

所以输出是当我在执行TOAD查询来作为3个不同的列。但是当在这个脚本中使用相同的查询时,如何可能将输出视为单个字段cycle_code

回答

3

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

+7

这实际上是一个完全正确的答案,但将有助于提的是,*原因*它发生是因为分割位于垂直竖条上(由可选空白区域包围),并且输入中没有竖条。 – hobbs 2010-05-06 09:51:35

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 
相关问题