2010-05-06 74 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 
相關問題