1

Perl 新手和我的局限性令人沮丧。任何帮助是极大的赞赏。

创建脚本,它将:

  1. 输入文件并解析测试模式匹配
  2. 将特定匹配的单词输出到变量
  3. 针对变量运行外部 Windows 程序 (nslookup),
  4. 解析 nslookup 的输出以进行测试模式匹配
  5. 将特定匹配的单词输出到变量
  6. 在两个变量之间执行替换
  7. 然后将修改后的文本输出到文件中

在 input.txt 文件中回显“这是一台机器:ford.com 测试”

我的打印输出有问题,因为我不断收到以下信息

在 test21.pl 第 38 行的 void 上下文中无用使用字符串。
非权威答案:在 test21.pl 第 39 行的打印中使用未初始化的值 $_。

0

#!/bin/perl
use strict;
use warnings;
use Net::Nslookup;
use File::Copy;

sub host {
    my $result;
    my $node = shift;
    print system("nslookup $node.com | findstr ^Name: >> POOH");
    open( my $stuff, "<", "POOH" ) || die "Can't open input.txt: $!";
    while (<$stuff>) {
        if (/(Name:)(\s+)(\w+)/) {
            $result = $3;
        }
    }
    return $result;
}

my $captured;
my $captured2;
my $jeff;
my $in   = 'input.txt';
my $out  = 'output.txt';
my $test = 'test.txt';

copy( $in, $out ) || die "File cannot be copied.";
open OUTPUT, "< $out"  || die "Can't open input.txt: $!";
open TEST,   "> $test" || die "Can't open input.txt: $!";

while (<OUTPUT>) {    # assigns each line in turn to $_
    if (/(Machine:)(\s)(\w+)/) {
        $captured = $3;
        $jeff     = host($captured);
    }

    "s/$captured/$jeff/g";
    print TEST;

}
4

2 回答 2

0

您不需要在“s/$captured/$jeff/g”周围加上引号。对于第二个问题,我会更明确地说明我打印到文件处理程序的内容。例如打印测试 $_

于 2013-08-21T19:24:44.900 回答
0

感谢大家的建议。在使用 while 循环输入一行代码后,找到一些指示我保存默认标量变量的代码到一个变量中。这样做可以为我节省很多乱七八糟的编码。这是功能代码。

#!E:/Perl/bin/perl
use strict;
use warnings;

sub host {
    my $result;
    my $node = shift;
    print system("nslookup $node.com | findstr ^Name: >> LOOKUP");
    open(my $stuff,  "<",  "LOOKUP") || die "Can't open input.txt: $!"; 
    while (<$stuff>) { 
       if ( /(Name:)(\s+)(\w+)/ ) {
       $result = $3;
       }
   }
   return $result;
}

my $captured;
my $jeff;


open INPUT, '<', 'input.txt' || die "Can't open input.txt: $!";
open OUTPUT, '>', 'output.txt' || die "Can't open input.txt: $!";

while (<INPUT>) {     # while loop inputs each line of input.txt file
  my($line) = $_; 
  if ( /(Machine:)(\s)(\w+)/ ){ 
  $captured = $3; 
  $jeff = host($captured); 
  $_ = $line; 
  $line =~ s/$captured/$jeff/g; 
  print OUTPUT $line; 
  }
}

close OUTPUT;
close INPUT;
于 2013-09-04T01:37:58.013 回答