配列の最後の要素のインデックスを取得する

配列は複数の要素を持つことができますが、配列の最後の要素のインデックスを取得することができます。これを利用して配列の要素数を変更したり、要素の数を取得することができます。ここでは Perl で配列の最後の要素のインデックスを取得する方法について解説します。

(Last modified: )

最後の要素のインデックスを取得する

配列の最後の要素のインデックスを取得するには次のように $#配列名 と記述します。

$#配列名

次の例を見てください。

my @str = ("A", "B", "C");
print $#str."\n";

配列 @str は 3 つの要素があるので、 $#str は 2 を返します。(インデックスは 0 から始まるので最後の要素のインデックスは要素数 - 1 です)。

配列の要素を、要素数の数だけ順に取得するには次のように記述できます。

my @str = ("A", "B", "C");
for (my $i = 0; $i <= $#str; $i++){
  print "$str[$i]\n";
}

配列の要素数を変更する

$#配列名 は要素の最後のインデックスを参照しているわけではなく、最後のインデックスが何番なのかを管理しているものです。その為、 $#配列名 の値を変更すると配列に含まれる最後のインデックスの番号が変更されます。

例えば現在の要素数よりも少ない数値を指定すれば、要素そのものが減少します。現在の要素数よりも大きい数値を指定すれば、要素が増えます。

次の例を見てください。

my @str = ("A", "B", "C");

$#str = 1;

配列の最後の要素のインデックスに 1 を指定しています。そのため、この配列の最後のインデックスは 1 となるので、インデックスが 2 の要素はなくなります。

今度は要素数を増やしてみます。次の例を見てください。

my @str = ("A", "B", "C");

$#str = 3;

配列の最後の要素のインデックスに 3 を指定しています。そのため、この配列の最後のインデックスは 3 となるので、インデックスが 3 の要素が配列に追加されます。(増えた要素に値は格納されていないので、要素の値は未定義値 undef となります)。

サンプルコード

それでは簡単なサンプルを作成します。

use strict;
use warnings;
use utf8;
binmode STDIN, ':encoding(cp932)';
binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

my @str = ("A", "B", "C", "D");

for (my $i = 0; $i <= $#str; $i++){
  print "$str[$i]\n";
}

print "----\n";
$#str = 1;

for (my $i = 0; $i < @str; $i++){
  print "$str[$i]\n";
}

テキストエディタでプログラムを記述したあと sample.pl という名前で保存します。(文字コードは UTF-8 です)。コマンドプロンプトを起動し、プログラムを保存したディレクトリへ移動したあとで次のように実行します。

perl sample.pl

次のように実行結果が表示されます。

配列の最後の要素のインデックスを取得する(1)

4 つの要素を持つ配列を作成し、そのあとで要素の数だけ要素の値を順に取得し画面に出力しています。そのあとで最後の要素のインデックスを 1 に変更し、あらためて要素の数だけ要素の値を順に取得し画面に取得しています。

なお 2 つ目の繰り返し処理では要素の数として @配列名 を使用しています。この方法で配列の要素の数を取得する方法は「配列の要素数を取得する」を参照されてください。

-- --

Perl で配列の最後の要素のインデックスを取得する方法について解説しました。

( Written by Tatsuo Ikura )

Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。