Объединение двух строк с точкой (.) В Perl - PullRequest
0 голосов
/ 08 февраля 2012

У меня проблема в моей программе Perl, когда я пытаюсь объединить имя компьютера в строку со строкой с точкой (.), См. Код ниже.

#!/usr/bin/perl
use strict;
use warnings;

chomp(my $COMPUTERNAME = `hostname`); #this should give the computername e.g CH-B7G33
my $complog = $COMPUTERNAME.".log"; 
print "$complog";

Ожидаемыйвывод будет.

CH-B7G33.log

Но то, что я получил, неправильно, оно распечатано.

.logB7G33

Я что-то не так сделал в коде?Пожалуйста, помогите мне, я начинающий Perl и, кстати, извините за мой английский.

Ответы [ 2 ]

11 голосов
/ 08 февраля 2012

Возвращаемое значение из вашего системного вызова содержит \r в конце, который chomp не убирается.Таким образом, ваша строка выглядит как CH-B7G33\r.log, что при печати приводит к тому, что терминал отображает CH-B7G33, затем перемещает курсор назад к началу строки, а затем отображает .log, который перезаписывает символы, что приводит к неверному выводу.увидел.

Использование подстановки хорошо работает и будет обрабатывать как \r, так и \n окончания строк (и другие завершающие пробелы, как написано здесь).

(my $COMPUTER_NAME = `hostname`) =~ s/\s+$//;
9 голосов
/ 08 февраля 2012
use Sys::Hostname;
print hostname . ".log";

Нет необходимости chomp или переходить в оболочку, когда есть хорошая библиотечная функция, которая делает то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...