我试图在perl中连接3个字符串,并且我得到了奇怪的行为。数据刚刚写入脚本中的文件,我正在尝试向数据中添加两列。
这是我的代码及其行为
print "phylipId is $phylipId\n";
print "Tree is $tree\n";
print "Line is $line\n";
my $string = join "\t", $phylipId, $tree, $line;
print "Concatenated is $string\n";
给我这个输出
phylipId is 4
Tree is (138,((139,141),140));
Line is 000931 17.0 1.0 0.135 no 1044 646918204
Concaten000931s 17.0 1.08,((10.1351),no0)); 1044 646918204
这也发生在我使用的时候。运营商。 任何帮助将不胜感激
答案 0 :(得分:4)
看起来您正在使用回车符($tree
)从文件中读取\r
,而$tree
最后会以\r
结尾,导致它寻求线的开头。
参见此测试:
perl -e 'print("abcdefghijkl\r\t012\n");'
哪个输出
abcdefgh012l
答案 1 :(得分:1)
正如帕特里克所说,很有可能你在Linux机器上读过DOS格式的文件。在这种情况下,如果您对以chomp
结尾的字符串使用"\r\n"
,则会留下"\r"
。
清理此类记录的最简单方法是将chomp
替换为
s/\s+$//
,由于"\r"
和"\n"
都计为空格,因此将同时从字符串中删除两者。如果尾随制表符和空格对您很重要,请使用
s/[\r\n]+$//
相反,或者
s/[[:cntrl:]]+$//
或
s/\p{Control}+$//
答案 2 :(得分:0)
在Windows和Linux下尝试后,我无法复制您的问题。