|
|
|
Perl基礎講座(3) 変数の複数形(1) -配列について- 基礎講座(1)にて、変数について解説しましたね? 変数はある1つの値を持つものでした。 配列(arrayと言います)というのは、いくつかの要素を持つ変数、です。 変数[index]によって、その1つの変数として値を参照することができます。 といってもわかりづらいので、例を示します。 @home=( "tatoeba", "kouiu fuuni", "atai wo irete", "mimasu" );配列@homeが、これで生成されました。 今生成した内容を表にするとこういう風になります。
配列の始点は必ず0からです。 配列の末尾は作成するときによって変わってきます。 上のように作成した場合には、順番通り、4つの要素を入れていくことになるので、 0,1,2,3のindexを持ちます。 配列を操作したり、配列の中の1つの値を入手したい時には、1つの変数を扱うように 操作します。 配列@homeの2つ目の値(index)を、変数$nyankoに入れてみましょう。 $nyanko = $home[2];これで、変数$nyankoに、$home[2]...配列の[2]のindexに存在する、atai wo irete が代入されました。 ちょっとまとめましょう 配列@homeの1つの要素を見るには、$home[index]という風に指定する。 indexは、一般的に「添え字」というようです。 これをline(行)として覚えてみると、少しは簡単かもしれません。 ここにノートがあります。 1ページが、「40行」のノートです。 ノートの1つの行の値は、それぞれ0行目,1行目,2行目...という風に並んでいて、 最終行は40行です。 ノートの1ページは、複数の行=複数の変数、によって構成されているリスト=配列 とみなすことができますね。 ノートの0行目を見たければノート[0行目] ノートの32行目を見たければノート[31行目] ・・・ということになります。 ※0から数えるので、32-1で、31として指定しています。 ※もっと細かく考えるとノートの1行も、1文字1文字により構成されている、 ※ということになりますが。 ※ま、それはさておき.... このように、配列とは0から順に作成されるリストであって、 リスト(配列)の値の一部は、変数と同じということが わかっていただけるかと思います。 この添え字を使えば、一番最初に配列を定義したものも、 こんな風に定義することができるようになります。 $home[0]="tatoeba"; $home[1]="kouiu fuuni"; $home[2]="atai wo irete"; $home[3]="mimasu"; 配列の値がどのぐらいの長さなのか、途中で知りたくなった場合は、 $line = @home;という風に 変数 = 配列; とすることで、配列の長さが、変数に代入されます。 便利なので覚えましょう。 途中で配列の中身を全部クリアしたい時 @home=();もしくは完全に消す場合 undef @home;undefは変数などでも使えますが、それほど利用する場面はあまりない関数(命令)だと 思います。 undefは指定したものを未定義値にする、という関数(命令)です。 undef(未定義)なのか、defined(定義された)か、は重要な項目です。 Perl5からは@という文字は、完全に配列を示すための文字になりました。 メールアドレス test@test.comというアドレスを、画面に表示(print)させたい場合、 print "my address > test@test.com"; などとすると、" "ですから、配列@testを展開しようとしてエラーが発生します。 @の前に\を置いてクォートさせるか、' '(シングルクォーテーション) でprintさせるようにする必要があります。 ※基礎講座の変数のところで書いた通りに、" "の中は変数展開が起こります。 また、スクリプト中のprint中で配列を表示させたい場合、 定義された配列の場合は、中身がそのまま表示されますが、 その配列が未定義値だった場合、 文字列中の@に\を置いてクォートしろ!というエラーが出てしまいます。 sample script print "test@test.com"; exit;test.plとして保存して実行。 未定義だと、このように「文字列中の@に\を置いてクォートしろ!」と、 エラーが出ていますね。 これに対して、空の中身の配列@testを作成した後はこうなります。 sample script 2 @test=(); print "test@test.com"; exit;test_2.plとして保存して実行。 @testを空の値として定義してあるので、エラーは出ずに、 test.com が表示されて終了しました。 @を文字としてそのまま表示したいのか、 @を配列として表示させたいのか、 その値は未定義なのか、定義されているのか、 ここのところに気をつけてください。 さて、簡単でしたが、配列とはなんぞや、はここまでで、 配列を便利に操作できる関数(命令)を紹介します。 push 配列の末尾に値を追加します。配列の要素(index)が1つ増える。 値として、現在の要素(index)数を返します。 使い方 push 配列名,入れたい値(もしくは変数) 要素数を取得しつつ、値を追加する場合は 変数 = push 配列名,入れたい値(もしくは変数) pop 配列の末尾の要素を取り除く。配列の要素(index)が1つ減る。 値として、取り除いた値を返す。 使い方 pop 配列名 取り除いた値を取得する場合は 変数 = pop 配列名 shift 配列の先頭の要素を取り除く。配列の要素(index)が1つ減る。 先頭を取り除くので、先頭より後ろの要素が1つずつ前にずれる(シフトする)。 値として、取り除いた値を返す。 使い方 shift 配列名 取り除いた値を取得する場合は 変数 = shift 配列名 unshift 配列の先頭の要素に追加する。配列の要素(index)が1つ増える。 先頭を追加するので、以前の要素が1つずつ後ろにずれる(シフトする)。 値として、現在の要素(index)数を返す。 使い方 unshift 配列名,入れたい値(もしくは変数) 取り除いた値を取得する場合は 変数 = unshift 配列名,入れたい値(もしくは変数) splice 配列から指定した場所から、指定した長さ分取り除く。 配列の要素(index)が指定した分減る。 取り除いた部分から後の要素は指定した場所の後ろへと移動する。 値として取り除いた要素を返す。 長さを指定しなければ、指定した場所から後ろ全部のデータが取り除かれる。 入れたい値が指定されていれば、取り除いた部分に値を挿入する。 使い方 splice 配列名,offset(指定する場所),length(指定した長さ),list(入れたい値) 取り除いた値を取得するには 配列 = splice 配列名,offset,length,list |