Perl输出问题

时间:2010-09-30 21:10:44

标签: perl printing

这看起来非常微不足道,但这对我没有任何意义。

我有以下代码片段:

foreach $i (@inputtext)
{
@line = split(/\|/, $i);
 foreach $j (@line)
 {
  print "$j, ";  
 }
}

输入是以下三行,相同:

  

98465895 |不知道什么在这里| 123任何地方车道|城市| ST | 55555 | data1 | pass1 | data2 | pass2 | data3 | pass3 |更多东西

输出最终成为了这个:

  

98465895,不知道这里有什么,123任何地方车道,城市,ST,55555,data1,pass1,data2,pass2,data3,pass3,更多东西
  ,98465895,不知道这里有什么,123任何地方车道,城市,ST,55555,data1,pass1,data2,pass2,data3,pass3,更多东西
  ,98465895,不知道这里有什么,123任何地方车道,城市,ST,55555,data1,pass1,data2,pass2,data3,pass3,更多东西

我没有理由看到会在print语句中创建一个endline,将逗号抛到下一行,并弄乱输出的下一行。有人有什么建议吗?

由于

3 个答案:

答案 0 :(得分:3)

我们无法看到从文件中读取的内容。您是否在输入文本上调用chomp以删除尾随换行符?

此外,不要使用for循环来用逗号连接字段,而是执行此操作:

print join( ', ', @line );

答案 1 :(得分:2)

我打赌$i在您split之前包含换行符。首先尝试chomp

答案 2 :(得分:1)

我不确定这段代码之前是什么,但我敢打赌它是这样的:

open FILE, 'filename';
@inputtext = <FILE>;

Perl针对您进行了优化,以不同方式解决问题:

use strict; use warnings;  # helps you avoid errors early

open my $file, '<', 'filename' or die $!;

while (<$file>) {                   # loads the next line from $file into $_
    chomp;                          # strip newline from $_
    print join ', ' => split /\|/;  # split uses $_ without an arg
    # or use split's output for anything else
}

如果您在子例程中使用此代码,请务必在local $_;循环之前while