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

私の2つの問題は

  • 何らかの理由で名前が 2 回出力され、エラーが発生します。
  • 初めて見つかったときに結果/名前を変数に保存するにはどうすればよいですか?
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 に答える