in reply to (Guildenstern) RE: RE (3): Should I use $ and $# ?
in thread Should I use $ and $# ?

tye is clearly correct about what is deprecated, but I personally see the language as being both precise and correct. The word "our" was reserved by Perl (though at that point not yet used) and using that reserved word as a bareword is deprecated. Which is exactly what it said.

I am sorry that the implication you didn't know how to find information irked you though. Perl has excellent and comprehensive documentation which a tremendous amount of work has been put into. Regrettably most people who are introduced to the language are not shown the documentation and have no idea how to use it. If you were in the (good) habit of looking to that documentation then the first thing you would have done is typed, "perldoc perl". Scan down that index and you would have found the following section:

perldebug Perl debugging perldiag Perl diagnostic messages perlsec Perl security perltrap Perl traps for the unwary perlport Perl portability guide perlstyle Perl style guide
All of these are good reads, except perldiag which is meant to be a reference. Now you type "perldoc perldiag", and search for your message. (Type in "/", a chunk of text, then return. Hit "n" as often as needed until you reach the right section.) Try that, time how long it takes. I bet it is under 5 minutes.

Now it is likely that you cracked open the Camel book for this, possibly loooked in chapter 9. And you did not find the documentation. Well the reason for that is that the documentation that you are reading is for Perl 5.003, and the message you are reading is from Perl 5.005. After two minor revisions of the language there are different diagnostic messages. While the Camel book is both valuable and good, the current online documentation (ignored by most Perl programmers) is always going to be more accurate.

So whether or not you are irked, it is true. You made a perfectly understandable mistake out of very understandable ignorance of how to use the documentation system that Perl comes with. If I got irked every time I made such a mistake I would have little time for anything else! Just today I found that I was leaving zombies because I was not calling wait properly. Darn. Didn't know I had to do that. Ask KM if you don't believe me, I used him as the classic "blank wall" while I realized my error. (My background really is math, not Unix programming.) Clearly that is "Mea culpa!" My bad! OK, fix my code, file that away, and move on. I won't do that again.

So again. You didn't know how to RTFM. Now you do. There is no fault in not knowing, or even in having used Perl for years and not knowing. The fact is that most Perl programmers do not know. (The only person in that thread who gave the right answer is someone whose name I immediately recognized as a Perl guru. That says a lot. Much of it not very good.) That is a different problem. A serious one IMO, but not yours. A lot of work has gone into producing documentation that very few people read, and something needs to be done about that. (Do you have any suggestions?)

The only way that I could possibly think less of you for your not knowing what you were never told would be if you did not take this as a sign that you should develop the skill and habit of reaching for perldoc every time you are not positive of some detail. Develop that skill and your next unknown Perl diagnostic will take under 3 minutes to answer, in detail, with an answer that I guarantee is accurate.

Regards,
Ben Tilly

PS As for, "It's been one of those days" - well I think we have all been there. Many, many times. At least I have...

PPS BTW another gem, Perl has a naming convention. It will never reserve for its use any bare-word that is not "seriously weird" (like $@), all upper case, or all lower case. And yes, there is a convention on what types of variables fit which description as well. Therefore if you either never use barewords, or else you always have mixed case, you will never, ever, conflict with any keyword in the language.

Replies are listed 'Best First'.
RE: RE (5): Should I use $ and $# ?
by tye (Sage) on Aug 12, 2000 at 08:31 UTC

    I personally see the language as being both precise and correct. The word "our" was reserved by Perl (though at that point not yet used) and using that reserved word as a bareword is deprecated. Which is exactly what it said.

    I respectfully (though strongly) disagree. And I do respect your contribution above and many others of yours. So please try to not let the strength of my disagreement come across as a criticism of you.

    The use of "our" is not depricated (as the message claimed). The use of "our" as a bareword is depricated. Other uses of "our" are being encouraged, though just not yet. Consider the two error messages:

    Use of %s is deprecated Use of reserved word """"%s"""" is deprecated

    They mean nearly the opposite (a feature is being added vs. a feature is going away), but sound nearly identical (in fact, you could correctly substitute the second for the first in most cases since the deprecated feature is usually still a reserved word!). The important parts of the latter (that it is being reserved for future use and that your use of it is being parsed as a bareword) are omitted. The term "reserved word" strongly implies that Perl considers "our" to be a keyword, while the important fact is that it isn't yet.

    That error message is (only slightly) incorrect. But the error message is very, very misleading. Also, the message is so simple and easy to understand (though incorrectly) that I can't fault someone (much) for not thinking to go read perldiag.pod to see if, perhaps, the message actually means nearly the opposite of what it says.

    Finally, the original use of "our" as a bareword was not based on a lack of knowledge of the fact that using all-lowercase barewords is a bad idea. It was based on the knowledge that "our" is a keyword in Perl, and a lack of knowledge of the fact that the version of Perl being used wasn't the a version that supported "our".

            - tye (but my friends call me "Tye")
      Please don't apologize for criticizing my opinion. There is no need - I have been on the receiving end of far worse!

      As to the message, it clearly does confuse a lot of people, why I don't know for sure. (The fact that there clearly is confusion means that there probably was a better way to word the error. Care to offer one?) Certainly I read it, and re-read it, and fail to see how it could mean anything other than what was intended. When I see the word "reserved" I don't think that means that it is in current use. Certainly that is not how it is used in daily life.

      When I reserve a plane ticket, I don't expect to immediately have a plane ride. Ditto when I reserve a hotel. And I frequently see parking lots with empty reserved spaces. So why when you see that Perl thinks that a word is reserved would you assume that it is actually in use?

      As for your claim that the messages mean opposite things, I respectfully and strongly do not agree. Both messages say that you are using a construct in a way that is now discouraged to make room for future changes. It is true that the actual change is different. One catches the keyword coming, one going. But in either case you are being warned that what used to work will work for now, but may break in any future release, so you should remove it from your code. Before it becomes a bug.

      As for the cause of the mistaken use of our, that is both interesting and yet another reason for learning to rely on your internal documentation rather than any source that may not match what you have installed. For instance if you use Camel 2 as a reference, that documents 5.003. (BTW it looks like the documentation on this site is also 5.003.) Camel 3 documents 5.6. Now in the new edition you will find both qr// and our. In the old you find neither. What will you find in 5.005? Well "perldoc -f qr" and "perldoc -f our" shows you that qr// exists and our does not.

      Get in the habit of consulting the installed documentation and you won't even try to use features that you saw being advertised because they showed up in a newer version than you actually have! :-)

      EDIT
      I wrote the above while tye was actually searching past archives of p5p for the actual discussions which produced the message in question. He turned up something different than I would have expected (it was my turn to assume I think:-), and I quite agree with his conclusion that the choice of "reserved" originally did mean "reserved for future use", accidentally became confusing, and there is a far better message that could have been used.

      I will let him post that though. :-)

        > (BTW it looks like the documentation on this site is also 5.003.)

        I know this is a small point to pick at, but it has been bugging me, and it has been brought up more than once. Our Head Honcho has put a lot of work into this site, and if you have ideas on how to improve it, by all means post something to the Perl Monks Discussion section. Updating the site documentation, for example, is a very good and very important idea - it's just a shame to see it buried deep inside a nested post as <disclaimer> what seems to me as </disclaimer> somewhat of a dig against the site.