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
In reply to Re^2: print complete line along side line number, when a pattern is matched in log file
by cavac
in thread print complete line along side line number, when a pattern is matched in log file
by noviceuser
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |