in reply to 'no such file' when it's there.

I would say that you are probably not in the directory that you think you are when you die. Test -e. Use Cwd and print the current directory. Run ls from within Perl.

As for other comments, first of all just don't include a return in your die and you get the line number. See the message you quote for an example. So you don't need to put it in your scripts, Perl does it for you, and will keep the line numbers correct after every edit to the script.

Secondly you don't need to track line numbers in files you are reading, Perl does it for you in the special variable $. (see perlvar).

Thirdly you are not consistently putting filenames in your error messages. That really is a good habit to get into.

And finally, I would personally get irritated with a script that told me, "DIE DIE DIE!!!". All caps means yelling to me. I am perfectly capable of seeing that you died. I don't particularly need to be yelled at while I am trying to fix it...

  • Comment on Re (tilly) 1: 'no such file' when it's there.

Replies are listed 'Best First'.
RE: Re (tilly) 1: 'no such file' when it's there.
by jptxs (Curate) on Aug 31, 2000 at 08:00 UTC

    sorry to yell, didn't think about changing that before poting last time.

    maybe I'm just using it wrong, but $. doesn't seem to behave as I'd expect.

    i did:

    15 foreach my $line ( @newfile ) {
    16 if ( $line =~ m!dienice\("\d+\b! ) {
    17 $line =~ s!dienice\("\d+\b!dienice\("$. !i;
    18 $test = 1;
    19 } elsif ( $line =~ m!dienice\("\D+\b! ) {
    20 $line =~ s!dienice\("(\D+)\b!dienice\("$. $1 !i;
    21 $test = 1;
    22 }

    then printed to the old filename. it all works except all the numbers are 0. as in the replaced lines look like :

    "...or dienice("0 Can't connect to Oracle database..."

    where 0 is where one would expect the line number. there were no line numbers or incorrect ones before, so this is progress. i tried my old syntax with the $line_num++, and that works, but I'd much rather use your suggestion as it's cleaner. any ideas?

      $. is the line number on the most recent filehandle read, and reset when the file is closed. You're now wandering through an array, not reading a file, so the $. won't make any sense or correlation. If you want an element number, do this:
      for my $line (0..$#newfile) { .. access $newfile[$line] .. if error, talk about "line number $line" }

      P.S. in the future, please enclose your code in CODE tags. Much easier to read.

      -- Randal L. Schwartz, Perl hacker

        CODE! i was wondering how y'all did that...

        is there any advatage to using that over simply using a $line_num++ for each line i go through?