在Perl中将两个字符串与点(。)组合在一起

时间:2012-02-08 06:13:00

标签: string perl

当我尝试将字符串中的计算机名称与带点(。)的字符串组合时,我的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 个答案:

答案 0 :(得分:11)

系统调用的返回值最后包含\rchomp未清除。因此,您的字符串最终看起来像CH-B7G33\r.log,当打印时导致终端显示CH-B7G33然后将光标移回到行的开头,然后显示覆盖字符的.log,导致您看到的错误输出。

使用替换效果很好,并且会处理\r\n行结尾(以及其他尾随空格,如此处所写)。

(my $COMPUTER_NAME = `hostname`) =~ s/\s+$//;

答案 1 :(得分:9)

use Sys::Hostname;
print hostname . ".log";

当有一个很好的库函数可以做你想要的时候,没有必要chomp或者跳到shell。