Perl プログラムでファイルからいくつかのデータ パターンを照合しようとしています。一致は複数の行にまたがる可能性があるため、行区切り記号を未定義にしました。
$/ = undef ;
ここで、一致が複数の行と複数の行にまたがる可能性があるため、smgi 修飾子を使用しています。
if ( $msgText =~ /$msgTypeExpr/smgi )
今、私が抱えている問題は、上記の変数 $msgText を置き換えていないのに変更されることです。
関連するコードは次のとおりです。
open (HANDLE1,"$file") || die "cannot open file \n";
$/ = undef ;
while ( my $msgText = <HANDLE1> )
{
my $msgTypeExpr = "<city\\W+";
print "Attempt 1:\n";
if ( $msgText =~ /$msgTypeExpr/smgi )
{
print "matched\n";
}
else
{
print " not matched \n";
}
print "Attempt 2:\n";
if ( $msgText =~ /$msgTypeExpr/smgi )
{
print "matched\n";
}
else
{
print " not matched \n";
}
}
テスト入力ファイルは次のようになります。
<city
name="abc">
</city>
パターンが 2 回一致することが予想されますが、一致するのは 1 回目のみで、2 回目は一致しません。
一致する前に一時変数に割り当てて、その一時変数を使用して一致させることで、この問題を一時的に修正しました。
my $tmpMsgText = $msgText ;
このフォーラムに質問を投稿するのはこれが初めてですので、私が犯したかもしれないエチケットの間違いを許してください。