It was the use of "our" as a bareword
that was deprecated so that "our" could be used as a
keyword. "our" was not deprecated. Yes, that particular
error message is quite poorly worded (IMHO).
-
tye
(but my friends call me "Tye")
| [reply] |
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. | [reply] [d/l] |
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") | [reply] [d/l] |
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. :-)
| [reply] |