Perl には、スカラ、スカラの配列、「ハッシュ」とも呼ばれるスカラの 連想配列という 3 つのデータ構造があります。通常の配列は 0 を基点とする数 値でインデクスされます。(負の添字は、配列の終わりからインデクスします。) ハッシュ配列は、文字列でインデクスされます。
スカラ値の参照は、配列の一要素であるスカラを参照する場合でも、常に名前に `$' を付けます。以下のようなものが使えます:
$days # 単純なスカラ変数 "days" の値 $days[28] # 配列 @days の 29 番目の要素の値 $days{'Feb'} # ハッシュ %days の 'Feb' の値 $#days # 配列 @days の最後のインデクス値
ただし、配列全体や配列のスライスは `@' で示します:
@days # ($days[0], $days[1],..., $days[n]) @days[3,4,5] # @days[3..5] と同じ @days{'a','c'} # ($days{'a'},$days{'c'}) と同じ
ハッシュ全体は `%' で示します:
%days # (key1, val1, key2, val2,...)
さらに、サブルーティンは名前の前に `&' を付けて示しますが、曖昧にな らなければ、(英語でもほとんど使われなくなった do のように)省略する ことができます。シンボルテーブルのエントリは、名前に `*' を付けて示 すことができますが、使用に際しては十分に注意する必要があります。
変数のすべての型には、それぞれの名前空間があります。衝突を心配せずに、ス カラ変数、配列、ハッシュ (ついでにファイルハンドルやサブルーティン名、ラ ベル) に、同じ名前を付けることができます。つまり、`$foo' と `@foo' は2つの異なる変数であるということです。また、`$foo[1]' は `@foo' の一部であって、`$foo' の一部ではありません。奇妙に 思えるかもしれませんが、それで良いのです。奇妙なのですから。
変数と配列の参照は、いつも `$'、`@'、`%' で始まりますか
ら、「予約」語は、変数名としては、本当の意味で予約されているわけではあり
ません。(しかしながら、先頭に特別な文字を付けない、ラベルやファイルハン
ドルとしては、予約されていることになります。たとえば、`log' といっ
た名前のファイルハンドルを使うことはできません。ヒント:
open(log,'logfile')
などではなく、open(LOG,'logfile')
とし
てください。大文字のファイルハンドルを使えば、読みやすくもなりますし、将
来に渡る予約語との衝突も避けられます。大文字と小文字は区別されますから、
`FOO'、`Foo'、`foo' は、すべて違う名前です。英字と下線で
始まる名前は、名前の一部に数字や下線を含むことができます。
そのような英数字の名前を、その型のオブジェクトへのリファレンスを返す式で 置き換えることも可能です。詳しくは、See section リファレンスとデータ構造のネスト, を参照してください。
数字で始まる名前には、数字しか含めることができません。英字、下線、数字以
外の文字で始まる名前は、$%
や $$
のように 1 文字に限定され
ます。(これら 1 文字の名前の多くは、Perl があらかじめ意味を定めています。
たとえば、$$
はカレントプロセスのプロセス id を示します。) (訳注:
$^A
など 2 文字が続く変数が Version 3 の終わり頃から、いくつかで
きています。ただし、^A の 2 文字を control-A の1 文字 (16 進数の 0x01)
で置き換えることも可能です。)
Go to the first, previous, next, last section, table of contents.