正規表現によって文字列を検索し、該当する文字列が存在する場合には存在する旨のメッセージを出力し、存在しない場合には存在しない旨のメッセージを出力するようなプログラムを作りたいのですが現在うまくいっておりません。ソースは以下になります。

#!/usr/bin/perl

$logfile= './log_euc.log'; # ログファイル

@logs = &read_file($logfile);

foreach $log (@logs) {
if ($log = ~/hogehoge/ ){
$log_stg = " 変数に文字列hogehogeは含まれています。 ";
}else{
$log_stg = " 変数に文字列hogehogeは含まれていません。 ";
}

print " 判定結果\n ";
print " $log_stg\n ";
}

sub read_file {
local($logfile) = $_[0];
open(IN,$logfile);
local(@files) = <IN>;
close(IN);
return @files;
}

検索対象のファイル「log_euc.log」は以下です。

hogehoge
mugemuge
riri
ari
siri
siursoiu
sojowijugo
hfsoiehrohogehoge

sjhoisjofhoge osihojfhoge
hsoghsoehogehogesoijggggg

検索結果は以下です。

判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。
判定結果
変数に文字列hogehogeは含まれています。

A 回答 (1件)

if ($log = ~/hogehoge/ )



のイコールとチルダの間に空白が入っているせいではないでしょうか。

正しくは

if ($log =~ /hogehoge/ )

のようにチルダをスラッシュ側ではなくイコール側に付ければOKだと思います。
    • good
    • 0

このQ&Aに関連する最新のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ