当我尝试将字符串中的计算机名称与带点(。)的字符串组合时,我的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初学者,并且对我的英语抱歉。
答案 0 :(得分:11)
系统调用的返回值最后包含\r
,chomp
未清除。因此,您的字符串最终看起来像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。