Perl::サブ文字列を見つけて単語全体を表示する

Perl::サブ文字列を見つけて単語全体を表示する

以下のデータの一部を含むテキストファイルがあります。

 PADHOGOA1 IOP055_VINREG5_1 ( .IO(VINREG5_1), .MONI(),
 .MON_D(px_IOP055_VINREG5_1_MON_D), .R0T(px_IOP054_VINREG5_0_R0T),
 .IO1() );

 PADV30MA0 IOP056_VOUT3_IN ( .IO(VOUT3_IN),
 .V30M(px_IOP056_VOUT3_IN_V30M));

 PADV30MA0 IOP057_VOUT3_OUT ( .IO(VOUT3_OUT),
 .V30M(px_IOP057_VOUT3_OUT_V30M) );

 PADV15MA0 IOP059_VOUT15_OUT ( .IO(VOUT15_OUT),
 .V15M(px_IOP059_VOUT15_OUT_V15M) );

PADHOGOA1 IOP064_VREFLB ( .IO(VREFLB), .MONI(), .MON_D(px_IOP064_VREFLB_MON_D), .R0T(px_IOP064_VREFLB_R0T), .IO1() );

私の部分文字列は.V15M

この部分文字列を見つけて単語全体を表示したいと思います。

希望の出力:

.V15M(px_IOP059_VOUT15_OUT_V15M)

助けが必要です。

私が試しているコードは次のとおりです。

my $var= '.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
chomp;
@words=split(",",$_);
foreach my $word(@words){
if($word =~ /$var/){
print "FOUND",$word, "\n";
}
}   
}

私が得た結果は次のとおりです。 PADV15MA0 IOP059_VOUT15_OUT ( .IO(VOUT15_OUT)

何が間違っているのか理解できません。

ベストアンサー1

何の問題もなく動作しますが、正規表現がどのように動作するか誤解しました。これは.「すべての文字と一致」を意味するので、 で一致する.V15Mので、次のような結果が得られます。DV15PADV15MA0

FOUND PADV15MA0 IOP059_VOUT15_OUT ( .IO(VOUT15_OUT)
FOUND .V15M(px_IOP059_VOUT15_OUT_V15M) );

あなたが望むものは次のとおりです。

#!/usr/bin/perl -w
my $var= '\.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
  chomp;
  @words=split(",",$_);
  foreach my $word(@words){
    if($word =~ /$var/){
      print "FOUND",$word, "\n";
    }
  }   
}

これにより、次のものが返されます。

FOUND .V15M(px_IOP059_VOUT15_OUT_V15M) );

ただし、コードには単語のみが必要とマークされているため、この場合は入力行をカンマではなくスペースで区切ります(ファイルにはカンマはありません)。

#!/usr/bin/perl -w
my $var= '\.V15M';
open(my $file,'<',"filename") or die $!;
while(<$file>){
  chomp;
  @words=split(" ",$_);
  foreach my $word(@words){
    if($word =~ /$var/){
      print "FOUND ",$word, "\n";
    }
  }   
}

おすすめ記事