Объединение строк в Perl с наложением строк - PullRequest
2 голосов
/ 24 марта 2012

Я пытаюсь объединить 3 строки в Perl, и у меня странное поведение. Данные были просто записаны в файл ранее в сценарии, и я пытаюсь добавить к ним два столбца.

Вот мой код и его поведение

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

Это также случилось, когда я использовал. оператор. Любая помощь будет оценена

Ответы [ 3 ]

4 голосов
/ 24 марта 2012

Похоже, что вы читаете $tree из файла, используя возврат каретки (\r), и $tree заканчивается на \r в конце, вызывая поиск в начале строки.

См. Этот тест:

perl -e 'print("abcdefghijkl\r\t012\n");'

Какие выходы

abcdefgh012l
1 голос
/ 24 марта 2012

Как говорит Патрик, более чем вероятно, что вы прочитали файл в формате DOS на Linux-коробке. В этих обстоятельствах, если вы используете chomp в строке, оканчивающейся на "\r\n", у вас останется "\r".

Самый простой способ очистить записи, как это, заменить chomp на

s/\s+$//

, который, поскольку оба "\r" и "\n" считаются пробелами, удалит оба из строки одновременно. Если для вас важны завершающие табуляции и пробелы, используйте

s/[\r\n]+$//

вместо этого или, возможно,

s/[[:cntrl:]]+$//

или

s/\p{Control}+$//
0 голосов
/ 24 марта 2012

Я не могу повторить вашу проблему после попытки под Windows и Linux.

  • Может ли проблема быть связана с настройкой вашей консоли?
  • это происходит наи другие машины тоже?
  • Можете ли вы рассказать больше о вашей конкретной среде?
  • Что произойдет, если вы попытаетесь напечатать эту строку в текстовый файл вместо стандартного вывода?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...