in reply to Re: print complete line along side line number, when a pattern is matched in log file
in thread print complete line along side line number, when a pattern is matched in log file

An even better way to report an error would be croak() from the Carp module. This provides a stack trace. While that doesn't matter in a very simple linear program, things change quite a bit as soon as you write a single function that could be called from multiple places.

#!/usr/bin/env perl use v5.36; use strict; use warnings; use Carp; # --------- make demo file open(my $ofh, '>', 'exists.dat') or croak($!); for(1..3) { print $ofh "BLA\n"; } close $ofh; #--------- print "exists.dat has ", countLines('exists.dat'), " lines\n"; my $linecount = 0; foreach my $fname (qw[exists.dat doesnotexist.dat]) { $linecount += countLines($fname); } sub countLines($fname) { my $linecount = 0; open(my $ifh, '<', $fname) or croak("$!"); while((my $line = <$ifh>)) { $linecount++; } return $linecount; }

When we run it, we get a nice backtrace:

$ perl carptest.pl exists.dat has 3 lines No such file or directory at carptest.pl line 26. main::countLines("doesnotexist.dat") called at carptest.pl line 21

PerlMonks XP is useless? Not anymore: XPD - Do more with your PerlMonks XP
  • Comment on Re^2: print complete line along side line number, when a pattern is matched in log file
  • Select or Download Code