我对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 :(得分:6)
您的输入文件可能包含回车符\r
字符。您可以s/\r//g
删除它,或者将输入格式MSWin转换为* {nix dos2unix
或fromdos
。