in reply to return code for finding a keyword within a line

The secret is in capturing the value between the parentheses. Your message always has the same basic string "Time for all triggers in report period (?s)". You can capture the value you want by putting parentheses in your regular expression around those values. Since your value is digits, use \d+. The '+' quantifier matches 1 or more of the previous character (in this case \d, or a digit). So, it will match one or more digits.

Remember to escape any parentheses that are in in the string you are searching. For example: $msg =~ /report period \((\d+)/

When you do this, the value is store in a built-in variable ${1} for the first set of parentheses, ${2} for the second set, etc.

For example:

my @msgs = ("Thu Oct 18 21:26:36 2007: Time for all triggers in rep +ort period (300s): 1.330981s", "Thu Oct 18 21:27:36 2007: Time for all triggers in r +eport period (600s): 1.457271s", "Thu Oct 18 21:28:36 2007: Time for all triggers in r +eport period (60s): 1.340150s"); for my $msg (@msgs) { if ($msg =~ /Time for all triggers in report period \((\d+)s\)/) { my $time = ${1}; # Insert your logic here... if ( $time >= 600) { print "Time ($time) >= 600\n"; } elsif($time >= 300) { print "Time ($time) >= 300\n"; } elsif($time >= 60 ) { print "Time ($time) >= 60\n"; } else { print "Time ($time) < 60\n"; } } }

Replies are listed 'Best First'.
Re^2: return code for finding a keyword within a line
by sultano (Initiate) on Oct 19, 2007 at 20:56 UTC
    thank you very much to all!!!

    this is exactly what I needed. I was able to play around with it as I entered some bogus text in a text file:
    Fri Oct 19 14:11:53 2007: Time for all triggers in report period (60s): 1.393467s

    Fri Oct 19 14:12:53 2007: Time for all triggers in report period (120s): 1.416134s

    Fri Oct 19 14:12:53 2007: Time for all triggers in report period (300s): 1.416134s