这是我的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
答案 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变量中。其他两个变量是空字符串。