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
|
|---|