Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 在Perl中结合两个带点(.)的字符串_String_Perl - Fatal编程技术网

String 在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

我在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初学者,顺便说一句,对不起,我的英语太差了

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+$//;