这看起来非常微不足道,但这对我没有任何意义。
我有以下代码片段:
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,将逗号抛到下一行,并弄乱输出的下一行。有人有什么建议吗?
由于
答案 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
。