in reply to Re: Re: Re: Tie::File is sucking the life out of me
in thread Tie::File is sucking the life out of me

Okay, I figured it out. It was the permissions, even though anyone could read the file when I ran 'ls -ltr'.

Is there something different about reading a file via file handle, as opposed to Tie::File? This is why I tried it the conventional way -- to see if I had permission to read the file.

Anyways, thanks for the help.
  • Comment on Re: Re: Re: Re: Tie::File is sucking the life out of me

Replies are listed 'Best First'.
Re: Re: Re: Re: Re: Tie::File is sucking the life out of me
by davido (Cardinal) on Apr 27, 2004 at 08:32 UTC
    It seems unlikely that Tie::File is silently failing to open the file. Did your original code have the "or die..." part as part of the 'tie' statement?

    The permissions issue can crop up if your script has read-only permission. Tie::File by default tries to open for read/write. If you want it to open for read-only, you have to use the mode attribute when you initiate the tie.


    Dave

      If the original script had the same "tie" line as the example shown, it has "|| die" where it should have "or die", so errors returned by tie would have been ignored.
        Great catch!!! It's an issue of precedence. To elaborate, || is higher up the food chain, and essentially acts upon the last argument of tie instead of on the return value of tie, because parenthesis weren't used. If the OP had used 'or' instead, he would have found that the script dies as he attempts to tie the array, because 'or' is lower down on the precedence list, and thus will attempt instead to act upon the return value of tie.

        There's a tutorial on the logical short circuit operators that discusses precedence: Perl Idioms Explained - && and || "Short Circuit" operators. Since I wrote it, I'm ashamed that I missed the OP's bug. ;)

        Good job ysth. That's it, I'm sure. ;)


        Dave