次の例では、一致した後に $ipaddress 変数に正規表現一致の値 (IP アドレス) を割り当てられないのはなぜでしょうか。私はいくつかの推奨される方法を試しました (明らかに Perl は初めてです) が、すべて失敗しました。マッチを実行するとき、各マッチが 1 から 9 の範囲の $1 変数に格納されるので、最初の値はデフォルトで $1 になるというのは本当ではないですか?
コードは次のとおりです。
sub block_match {
my $line_instance_b = $_[0];
my $ipaddress;
if ( $line_instance_b =~ /banned_ip|Found UltraSurf Signature|ip_block / ) {
$ipaddress = $1 if ($line_instance_b =~ /\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/);
print "Found ip address: ", $ipaddress, "in the following line: \n",
$line_instance_b;
}
else {
print "Not a block line: \n", $line_instance_b, "\n"
}
}
一致する行は次のとおりです。
INIT: banned_ip add 208.67.219.132 for FreeGate