On Mon, Mar 15, 2004 at 11:56:26AM -0700, John Williams wrote:
: On Wed, 10 Mar 2004, Larry Wall wrote:
: > You subscript hashes with {...} historically, or these days, �...�,
: > when you want constant subscripts. So what you're looking for is
: > something like:
: >
: > if / <?foo> ... <?baz> ... { $?foo{'baz'} ... $?baz } .../
: > or
: > if / <?foo> ... <?baz> ... { $?foo�baz� ... $?baz } .../
:
: I'm probably a bit behind on current thinking, but did %hash{bareword}
: lose the ability to assume the bareword is a constant string?
It's thinking hard about doing that. :-)
: And why ��? Last I heard that was the unicode version of qw(), which
: returns an array. Using an array constructor as a hash subscriptor is
: not a "least surprise" to me.
We'd be trading that surprise for the surprise that %hash{shift} doesn't
call C<shift>. Plus we get literal hash slices out of it for free.
Plus it also works on pair syntax :foo�some literal words�. And probably
trait and property syntax as well.
And basically because I decided :foo('bar') is too ugly for something
that will get used as often as switches are on the unix command line.
The %hash syntax is just a fallout of trying to be consistent with
the pair notation. Once people start seeing :foo�bar� all over,
they won't find %hash�bar� surprising at all, and will appreciate the
self-documenting literalness of argument.
And unfortunately it's an unavoidable part of my job description to
decide how people should be surprised. :-)
Larry