in reply to Getting element of anonymous hashref

print [("foo","bar")]->[1] returns bar, as I'd expect.

In addition to the answer you already got, please note that also with an anonymous arrayref those parens are not necessary, you can write ["foo","bar"] instead, and for ease of use, especially with a higher number of items, [qw/foo bar/].

With a hashref they're not only not necessary, but they also confuse the interpreter that choses to disambiguate the "wrong" (wrt your expectations) way in a situation like the one you've met. I believe you may also further disambiguate like thus:

$ perl -le 'print +{("foo","bar")}->{foo}' bar

Yep! It works... but of course there's no point doing so when simply ditching the parens would do in the first place. While we're here I'll also remind you that while your syntax is perfectly fine, people tend to prefer a fat comma a.k.a. => to separate key/value pairs since

  1. it logically stresses the relationship between them;
  2. it also autoquotes the key if it's a bare"word".