Perlのリファレンスとアロー演算子について
Perlの勉強をしています.
リファレンスとアロー演算子について教えて下さい.
■質問
下記のうち,(4)がどのように評価されるか教えて下さい.
先頭のシャープはプロンプトです.
(1)
よくある配列要素の指定方法
# perl -e '@a = (0,1,2,3); print($a[1]);'
→1
(2)
あまりよろしくないが,スライスを使っても,print文では@a[1]がリストのコンテキストで評価されるので同じ結果にはなる
# perl -e '@a = (0,1,2,3); print(@a[1]);'
→1
(3)
よくあるリファレンス/デリファレンスの方法
# perl -e '$a = [0,1,2,3]; print($a->[1]);'
→1
(4)
下記が成り立つ意味が分からない
# perl -e '@a = (0,1,2,3); print(@a->[1]);'
→1
@aは配列であってリファレンスでは無いと思うのですが,配列にアロー演算子が使えてしまっていいんでしょうか?
Perl5のマニュアルによれば(http://www.namazu.org/~tsuchiya/perl/info/perl-ja_20.html),アロー演算子は「右側が [...] か {...} の形の添字であれば、左側は配列かハッシュへのハードリファレンスかシンボリックリファレンス」と書かれているので,左側が配列そのものであるときは,エラーになるのではないかと思うのですが...
分かる方,どなたかご教授いただければ幸いです.
■環境
# perl -v
This is perl, v5.10.1 (*) built for i686-cygwin-thread-multi-64int
(with 13 registered patches, see perl -V for more detail)
Copyright 1987-2009, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
お礼
自分で考えていることを上手く言葉に表さない限り相手には決して伝わることはないと以前から熟知していたにも関わらず今回の質問はエスパーでないと答えられないような質問になってしまった事をまず謝らなければなりません。申し訳ありませんでした。 回答につきましてはこれまたしっかりと思うことができました。有り難うございます。ところで、これでも自分でいろいろと調べたつもりなのですが自分の検索力(あるいは理解力、検索力と理解力の両方)では限界があるようです。以前にお答えして頂いた回答と今回お答えして頂いた回答といいますのはtasekiさんの総合的なプログラミング力に他ならないと確信しておりますが、こんな自分(以前質問させて頂いた時に書いた通り、C言語の分岐条件くらいまでの経験しかありません)でも今回のようなプログラミングを作るために読んでおいた方がよいような書籍をもし知っていましたらお教えして頂けないでしょうか。やはり他の方の力を借りることは最終手段にするほうが実力も伸びると思います。あくまでも知っていた場合にのみで結構ですのでよろしくお願い致します。