3

我想tank2在下面的数组中找到名字,所以我这样做了

#!/usr/bin/perl                                                                                           
use strict; use warnings;

my @out = ("aaa\n", "pool: tank2\n", "ccc\n");
foreach my $line (@out) {$line =~ /pool: (.+)/; print $1;}

并得到

Use of uninitialized value $1 in print
tank2tank2

我的两个问题是

  • 由于某种原因,该名称被打印两次并出现错误。
  • 第一次找到结果/名称时,如何将结果/名称保存在变量中?
4

2 回答 2

4

相当不可读的版本:)

#!/usr/bin/perl                                                                                           
use strict; use warnings;

my @out = ("aaa\n", "pool: tank2\n", "ccc\n");
(my $var = (grep{/pool: (.+)/}@out)[0] )=~s/pool: //;
print $var;

和你的改进版本:

#!/usr/bin/perl                                                                                           
use strict; use warnings;

my @out = ("aaa\n", "pool: tank2\n", "ccc\n");
for my $line (@out) {
    print $1 if $line =~ /pool: (.+)/; 
}

并且没有$1

my $var;
    for my $line (@out){
        print $var if ($var) = ($line =~ /pool: (.+)/);
    }
于 2013-07-31T09:29:08.600 回答
1
my @out = ("aaa\n", "pool: tank2\n", "ccc\n");
foreach my $line (@out) {if ($line =~ m/pool: (.+)/) { print $1;}}

请注意您最终不会收到\n,因此您必须自己打印。

于 2013-07-31T09:24:22.667 回答