Hi Asad,
some comments on your script:
On Wed, 8 May 2013 11:34:14 +0530
> Thanks to you all for the inputs . I have created the following
> script :
>
> use warnings;
> use strict;
> use File::Slurp qw(read_file);
> use constant LIMIT => 3; ## Number of lines wanted
> use constant UPPERLIMIT => 9;
>
> open (OUTFILE, '>','d:\perl\OUTPUT.TXT');
1. Don't use bareword filehandles - use lexical ones instead.
2. Use autodie, or the "or die" thing:
http://perl-begin.org/tutorials/bad-elements/#open-function-style
>
> #my $file = $ARGV[0];
>
> my $filename = 'LOGFILE';
>
> open(FH, '<', $filename) or die $!;
1. Don't use bareword filehandles.
2. Including a meaningful message in the "die $!".
>
> my @lines = read_file($filename);
>
> for ( 0 .. $#lines ) {
Don't iterate using $_:
http://perl-begin.org/tutorials/bad-elements/#overuse_dollar_underscore
Use an explicit, lexical, iteration variable.
In recent perls, you can also use keys(@lines).
> if ( $lines[$_] =~ m{\b(VERIFICATION_FAILED)\b}i ) {
Use «(?: ... )» (for clustering) instead of «( ... )» (for capturing and in
this case, it is completely not-needed.
> print "$_\n";
> print $lines[$_];
> print OUTFILE join " " => '*', @lines[ $_ - LIMIT .. $_ + UPPERLIMIT
> ], $/;
MAke sure the upper and lower limits to the range are bounded.
> }
> elsif ($lines[$_] =~ m{\bfatal\b}i)
> {
> print OUTFILE join " " => '*', @lines[ $_ - LIMIT .. $_ +
> UPPERLIMIT ], $/;
> }
> elsif ($lines[$_] =~ m{\b'Exception Severity: 1'\b})
> {
> print OUTFILE join " " => '*', @lines[ $_ - LIMIT .. $_ +
> UPPERLIMIT ], $/;
> }
> elsif ($lines[$_] =~ m{\bstop\b}i)
> {
> print OUTFILE join " " => '*', @lines[ $_ - LIMIT .. $_ +
> UPPERLIMIT ], $/;
> }
1. You're using « $lines[$_] » too much - you should assign it to a variable.
2. There's a lot of duplicate code in the «print OUTFILE join " " => '*',
@lines[ $_ - LIMIT .. $_ + UPPERLIMIT ], $/;»
> elsif ($lines[$_] =~ m{\bfail\b}i)
> {
> print OUTFILE join " " => '*', @lines[ $_ - LIMIT .. $_ +
> UPPERLIMIT ], $/;
> }
> else
> {
> print " No Errors found \n";
> }
>
> Please review if the above code seems ok .
Hope it helped.
>
> Also want to know how to get this to UI(html page) interface for example a
> html page which has a browse button to select the log file and it displays
> the output parsing through the logic any module which this does or what you
> suggest.
You should write a module for that, and then use Dancer or whatever. See:
1.
http://perl-begin.org/topics/modules-and-packages/
2.
http://perl-begin.org/uses/web/
>
> Any pointers for UI interface or any book I can refer would be helpful.
>
The books are likely going to be out-of-date.
Regards,
Shlomi Fish
--
-----------------------------------------------------------------
Shlomi Fish
http://www.shlomifish.org/
First stop for Perl beginners -
http://perl-begin.org/
Jack: Hi Sophie!
Sophie: Don’t “Hi, Sophie!” me.
Jack: Don’t “Don’t ‘Hi, Sophie!’ me” me!
Please reply to list if it's a mailing list post -
http://shlom.in/reply .