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,但似乎无法找出(可能由于缺乏知识)造成这种情况的原因.我尝试调试脚本,但我没有看到价格变量中的任何特殊字符会导致这种情况.
字符串以$price回车符结尾.这会导致终端将光标移动到行的开头,导致前两个字段被后面的字段覆盖.
您可能正在读取unix框中的Windows文本文件.转换文件(dos2unix例如,使用),或使用s/\s+\z//;而不是chomp;.
如果CR在字符串的中间,你可以使用s/\r//g;.