nmm has asked for the wisdom of the Perl Monks concerning the following question:

How to add filter some ORA- errors in the below script:
======================================================
use File::Basename; $lp=$ARGV[0]; $regex=$ARGV[1]; $er_mes="Message: Check arguments: \"logfile_path\" \"regex\"."; $ws="Statistic:"; $wm="Message:"; $name = basename $lp; sub chk_var { if ($_[0] eq '') { print "$er_mes\n"; exit 1; } } sub out_res { print "Statistic: $_[0]\n"; print "Message: $_[1]\n"; exit 0; } chk_var($lp); chk_var($regex); unless (-e $lp) { print "$wm File $lp not found.\n"; exit 1; } $search=$regex; $search=~ s/[^a-zA-Z0-9]*//g; $fp='/tmp/new'.'_'.${name}.'_'.${search}; if (-e "$fp") { open (TF, $fp); while (<TF>) { chomp; $kr=$_; } close (TF); } else { $kr=0; } open (LF, $lp); my @lf = <LF>; close (LF); $i=0; $pos=1; $t=0; foreach $l (@lf) { chomp $l; if ($l =~ /$regex/) { $resl[$i]=$l; $resn[$i]=$pos; $i++; $t++; } $pos++; } if ($t lt $kr) { $kr=0; } $temp=$t-$kr; $kr=$temp+$kr; open (TF, ">$fp"); print TF "$kr\n"; close TF; $length=@resl; $limit=$length-1-$temp; if ($temp ne 0) { for ($i=$length-1;$i>$limit;$i--) { $l=$resl[$i]; $str.="<br/>"; $str.=$l; $str.=";"; } print "$ws $temp\n"; print "$wm Number of newly found string: $temp. Lines that have search + string: $str\n"; exit 0; } else { print "$ws $temp\n"; print "$wm No new strings found.\n"; exit 0; }

2017-12-05 Athanasius added code tags

Replies are listed 'Best First'.
Re: adding filter to perl script
by roboticus (Chancellor) on Dec 04, 2017 at 18:30 UTC

    nmm:

    You'd probably get some assistance if you'd edit your post and add code tags around the code (<c> your code </c>) to make it readable.

    I went ahead and looked at the script, but don't really see what you're asking about. It's not accessing a database, which is where I'd expect to see ORA- errors. If you mean that you're examining a log file with error messages, then what is it doing incorrectly?

    Also, while looking over your code, I may have accidentally stumbled across the (first) issue:

    if ( -e "$fp" ) { open( TF, $fp ); while (<TF>) { chomp; $kr = $_; } close(TF); } else { $kr = 0; }

    If you're expecting $kr to hold the contents of your file, then you'll want to change the marked line to $kr .= $_; to successively add each line to $kr. As it is now, each iteration of the loop replaces $kr with the latest line read, so at the end of the loop, it will hold only the last line of the file.

    ...roboticus

    When your only tool is a hammer, all problems look like your thumb.

Re: adding filter to perl script
by AnomalousMonk (Archbishop) on Dec 05, 2017 at 02:47 UTC