こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

配列の領域

配列に2つの要素しか入っていません
なぜマイナス領域にアクセスするんですか

@hoge = ('aaa','bbb');
print "$#hoge\n";
print "$hoge[1] : $hoge[0] : $hoge[-1] 4 : $hoge[-2] : $hoge[-3]\n";

投稿日時 - 2017-11-11 20:33:24

QNo.9396273

暇なときに回答ください

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.4

負の値でのアクセスが出来なければ、
@hoge[$#hoge] で最終要素に、@hoge[$#hoge-1] で最終要素の一つ前にアクセスできますが、それを簡易化するために負の値をPerlの仕様として実装していると理解すれば良いのではないでしょうか。
※@hoge[$#hoge] と@hoge[-1] は等価、@hoge[$#hoge-1] と @hoge[-2] は等価

投稿日時 - 2017-11-14 00:22:02

ANo.3

ちょっと質問の意図を理解しかねますが、
配列を直接渡すのなら &subroutine(@hoge)、
参照渡しするのなら &subroutine(\@hoge) で出来ます。

投稿日時 - 2017-11-13 22:57:20

補足

要素じゃない、リファレンスじゃない
マイナスでアクセスされる物は何ですか

投稿日時 - 2017-11-13 23:31:32

ANo.2

> Perlは配列渡しができる言語です
> 巨大な配列なら効率に影響が出ます

@hoge = ('aaa','bbb') という配列の要素数は2です。
負の値の配列番号をがついているからといって、$hoge[-1] と $hoge[-2] の要素を含んで渡されている訳ではありません。
※つまり配列の要素数が4という訳ではありません。

要素番号に負の値を許容していようといまいと、配列の要素数に違いはありませんので、効率に影響が出るとは思えません。

投稿日時 - 2017-11-13 19:36:29

補足

ー領域は参照なの?
確認できるコード教えてください

投稿日時 - 2017-11-13 20:01:26

ANo.1

Perlにおいて、配列の要素番号が負の値の場合は、最後の要素から逆順になります。

つまり、$hoge[-1] は bbb、$hoge[-2] は aaa、$hoge[-3] は存在していないので、空の値になります。

投稿日時 - 2017-11-12 00:16:13

補足

Perlは配列渡しができる言語です
巨大な配列なら効率に影響が出ます
それを補えるほどのメリットがあるのか
なぜこの様な仕様になってるのでしょう

投稿日時 - 2017-11-12 12:27:57