Perl Concat字符串截断行的开头

jin*_*wow 4 variables perl truncate concatenation

我在perl遇到一个奇怪的问题,我似乎无法找到答案.

我有一个小脚本,将解析来自外部的数据(无论是文件,网站等).解析数据后,它会将其保存为CSV文件.但是,问题是当我写文件或打印来筛选数据时,它似乎是截断字符串的开头.我正在使用严格和警告,我没有看到任何错误.

这是一个例子:

print "Name: " . $name . "\n";
print "Type: " . $type. "\n";
print "Price: " . $price . "\n";
print "Count: " . $count . "\n";
Run Code Online (Sandbox Code Playgroud)

它将返回以下内容:

John
Blue
7.99
5
Run Code Online (Sandbox Code Playgroud)

如果我尝试这样做:

print "$name,$type,$price,$count\n";
Run Code Online (Sandbox Code Playgroud)

我得到以下结果:

,7.99,5
Run Code Online (Sandbox Code Playgroud)

我尝试了以下内容以查看问题的开始位置并获取以下内容:

print "$name\n";
print "$name,$type\n";
print "$name,$type,$price\n";
print "$name,$type,$price,$count\n";
Run Code Online (Sandbox Code Playgroud)

结果:

John
John,Blue
,7.99
,7.99,5
Run Code Online (Sandbox Code Playgroud)

我还在学习perl,但似乎无法找出(可能由于缺乏知识)造成这种情况的原因.我尝试调试脚本,但我没有看到价格变量中的任何特殊字符会导致这种情况.

ike*_*ami 5

字符串以$price回车符结尾.这会导致终端将光标移动到行的开头,导致前两个字段被后面的字段覆盖.

您可能正在读取unix框中的Windows文本文件.转换文件(dos2unix例如,使用),或使用s/\s+\z//;而不是chomp;.

如果CR在字符串的中间,你可以使用s/\r//g;.