String 在Perl中结合两个带点(.)的字符串
我在Perl程序中遇到了一个问题,当我试图将计算机名与带点(.)的字符串组合在一起时,请参见下面的代码String 在Perl中结合两个带点(.)的字符串,string,perl,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-B7
#!/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初学者,顺便说一句,对不起,我的英语太差了
use Sys::Hostname;
print hostname . ".log";
如果有一个很好的库函数可以满足您的需要,那么就不需要
chomp
或突破shell。系统调用的返回值在末尾包含一个\r
,而chomp
并没有清除。因此,字符串最终看起来像CH-B7G33\r.log
,打印时会导致终端显示CH-B7G33
,然后将光标移回行的开头,然后显示.log
,这会覆盖字符,导致您看到的输出不正确
使用替换可以很好地处理\r
和\n
行结尾(以及其他尾随空格,如本文所述)
1) 您的示例不是有效的Perl。请在第一行的正确位置添加分号。2) 尝试简化,直到您能够理解,例如,put
print$COMPUTERNAME代码>在第二行,看看是否有效。感谢您的更正:)我面临同样的问题,您是如何处理的?我已经尝试过这个问题,但在另一台机器上,Perl在cygwin中运行。我不能运行这个,我想我仍然需要安装模块。不需要安装,它是Perl核心发行版的一部分<代码>$corelist Sys::主机名Sys::Hostname最初是用perl 5发布的
@quinekxi,您在cygwin上看到了什么症状?您是否有错误消息,或者它是否会产生混乱或不正确的输出?如果是,什么?perl-c
在cygwin下是否产生任何错误跟踪?Mike Samuel,我有一个错误消息,它说:“在@INC blah中找不到Sys/Hostname.pm”我找到了类似的解决方案。谢谢!:)
(my $COMPUTER_NAME = `hostname`) =~ s/\s+$//;