Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^5: Warnings on unused variables?

by ikegami (Patriarch)
on Sep 27, 2008 at 22:58 UTC ( [id://714076]=note: print w/replies, xml ) Need Help??


in reply to Re^4: Warnings on unused variables?
in thread Warnings on unused variables?

#3 indicates a position where a filehandle was used for an open and never used again, not even to check return value on a close.

close will never fail, cause all we want to do is create the file.

It adds all of a dozen characters

But that's a dozen of characters of unnecessary code. For just one line of code! I'd have useless code all over the place. Code that can do nothing but introduce errors, since it doesn't serve any function.

and leaves the warnings valid for any time I had opened multiple files, and then accidentally used one of the file descriptors twice in a row instead of using the one I intended.

No. Since you believe in closing everything explicitly, the warning won't help you there.

# $fh1 $fh2 # ---- ---- open(my $fh1, '>', $file1) or die; # 1 open(my $fh2, '>', $file2) or die; # 1 for (@data) { # print $fh1 "$_\n"; # 1 print $fh1 "$_\n"; # Oops # 1 } # close($fh1); # 1 close($fh2); # 1 # ---- ---- # 4 2 -> no warnings

Furthermore, autodie is a great module for testing errors on close, and it doesn't reference the file handle explicitly.

I'm not sure why putting your locks in your constructor

No, the constructor obtains the lock. The object is the lock.

I would not personally use constructor methods named in such a way that they can be easily mistaken for procedures

You've never used threads? And constructors are routinely called names other than new.

I'm not sure why [RAII] is substantially better [...] explicitly locking the object until it passes out of scope.

To properly release the lock when an exception occurs or when return is used more than once.

but I'd argue that this is exactly why I want a warning on code that looks like that.

I'd rather avoid doing away with exceptions, I'd rather my code doesn't throw spurious warnings, and I'd rather not have to us no warnings; all over the place. That's why it's better checked by a linter or until turned on explicitly (meaning -v and use warnings; wouldn't enable it).

You've hidden functionality inside a destructor-only event that is going to trigger many lines of code away from when you prepped it. I want a warning if someone does that.

You say deallocation of resources on block exit worthy of a warning? Every single variable in Perl does that!

Replies are listed 'Best First'.
Re^6: Warnings on unused variables?
by AZed (Monk) on Sep 28, 2008 at 00:32 UTC
    close will never fail, cause all we want to do is create the file.

    In this situation, yes. This may not be true later.

    But that's a dozen of characters of unnecessary code. For just one line of code! I'd have useless code all over the place. Code that can do nothing but introduce errors, since it doesn't serve any function.

    No, you shouldn't need it more than once, because that's a corner case you can stick in a procedure. The final close serves the function of making missing filehandles visible elsewhere.

    Since you believe in closing everything explicitly, the warning won't help you there.

    Careful, that's not what I said. I believe in making sure that every variable that was intentionally not used gets used in such a way that it is marked, even via an unnecessary close call, exactly because it allows you to catch errors like this by turning on warnings::unused:

    I'd rather avoid doing away with exceptions, I'd rather my code doesn't throw spurious warnings

    Well, we obviously have a fundamental philosophical disagreement about what is spurious. It may not be important; I'm not sure a discussion of warning philosophy warrants exclamation points and so much node space, but I'll offer you this: if you can show me a code formation that is plausibly frequently found in a project, raises warnings under warnings::unused, and any changes that would result in the warnings going away also results in the code becoming significantly less clear or maintainable, I'll concede the point and try not to bring it up again. We can play code tennis: you post something that warns, but is otherwise clear, and I try to make it clearer and warning-free. Writing code can be fun (and I do intend to follow up on your question about the behaviour of warnings::unused in different scenarios, because it is code). This kind of essay isn't, really, so otherwise, since I'm obviously not in a position to mandate anything in the development of Perl 6, let's leave it at that.

    <tweetybirdvoice>Twoo-Love!</tweetybirdvoice>

      No, a simple deallocation of resources wouldn't have required you to lodge everything in a constructor/destructor that way.

      Sorry, but that's all that those two examples did.

      You're refcounting from copies made in methods, or doing something else subtle

      Really, no. One released OS resources, the other released Perl resources by breaking cyclic references.

      Well, we obviously have a fundamental philosophical disagreement about what is spurious

      That's been my point all along. You're enforcing style, and thus a warning turned on by -w or use warnings; is not appropriate.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://714076]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chanting in the Monastery: (7)
As of 2024-04-25 16:15 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found