【问题标题】:Merging variables on Perl在 Perl 上合并变量
【发布时间】:2015-01-22 02:46:22
【问题描述】:

我对 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=。 它将第一个变量的第一个字符替换为第二个变量。我无法理解它。

任何形式的帮助都将不胜感激,因为我确信我只是错过了一件小事,这会让我以后觉得很愚蠢。

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

【问题讨论】:

  • 使用goto 不是一个好主意。如果您想要无限循环,请使用while(1) 循环。
  • 如果你搜索过,也许这对你有帮助:[join elements][1],一个 this:[concatenate variables in perl][2]。 [1]:stackoverflow.com/questions/4047895/… [2]:stackoverflow.com/questions/11782435/…
  • 不确定这些链接是否有用或与问题相关。
  • my @webservers = &lt;$handle&gt;; s/\s+\z// for @webservers;

标签: arrays perl list merge


【解决方案1】:

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

【讨论】:

  • 但是如果一切顺利的话,代码中的chomp 会这样做。
  • @reinierpost: chomp 删除 *nix 上的\n,即\x0A,它不处理\r,即\x0D
猜你喜欢
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 2020-03-09
  • 2016-07-20
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 2011-09-17
相关资源
最近更新 更多