在Perl上合并变量

问题描述:

我对Perl非常陌生。尝试合并两个变量时,我遇到了一个非常烦人的问题。 当我这样做一个简单的脚本,如:在Perl上合并变量

$arg1 = "hello"; 
$arg2 = " world"; 
print $arg1.$arg2; 

它似乎工作正常。 但是当我试图让它更复杂一点(将文件读入数组然后添加变量)时,它似乎不是添加第二个变量,而是替换第一个变量的第一个字符。

下面的代码:

#!/usr/bin/perl -w 
use LWP::Simple; 
use Parallel::ForkManager; 
use vars qw($PROG); 
($PROG = $0) =~ s/^.*[\/\\]//; 
if (@ARGV == 0) { 
     print "Usage: ./$PROG [TARGET] [THREADS] [LIST] [TIMEOUT]\n"; 
    exit; 
} 
my $host = $ARGV[0]; 
my $threads = $ARGV[1]; 
my $weblist = $ARGV[2]; 
my $timeout = $ARGV[3]; 
my $pm = Parallel::ForkManager->new($threads); 
alarm($timeout); 
open(my $handle, "<", $weblist); 
chomp(my @webservers = <$handle>); 
close $handle; 

repeat: 
for $target (@webservers) { 
     my $pid = $pm->start and next; 
         print "$target$host\n"; 
         get($target.$host); 
     $pm->finish; 
} 
$pm->wait_all_children; 
goto repeat; 

因此,如果文本文件(名单)应该是这样的:

www.site.com?url= 
www.site.net?url= 
etc 

和主机变量是domain.com。 因此,不要像这样:www.site.com?url=domain.com,我继续有这样的:domain.comsite.com?url=。 它用第二个变量替换第一个变量的第一个字符。我无法理解它。

任何形式的帮助,将不胜感激,因为我确信我只是想念一件小事,以后会让我感到蠢。

谢谢你,祝你有美好的一天!

+0

使用'goto'不是一个好主意。如果您想要无限循环,请使用'while(1)'循环。 – TLP 2014-11-24 11:48:00

+0

如果你搜索了,也许这对你有帮助:[join elements] [1],这是一个[在perl中连接变量] [2]。 [1]:http://*.com/questions/4047895/in-perl-how-can-i-join-elements-of-an-array-after-enclosing-each-element-in-胸罩 [2]:http://*.com/questions/11782435/how-to-concatenate-variables-in-perl – 2014-11-24 11:48:12

+0

不确定这些链接对问题有帮助或相关。 – Sobrique 2014-11-24 12:00:19

您的输入文件可能包含回车\r字符。您可以通过s/\r//g将其删除,或者将输入格式MSWin通过dos2unixfromdos转换为* nix。

+0

但是代码中的'chomp'确实如此,如果一切顺利的话。 – reinierpost 2014-11-24 14:26:34

+0

@reinierpost:'chomp'删除* nix上的'\ n',它是'\ x0A',它不处理'\ x0D'的'\ r'。 – choroba 2014-11-24 14:34:54