この節の関数は、式の中で項として使うことができます。これらは、大きく 2 つに分けられます: リスト演算子と名前付き単項演算子です。これらの違いは、 その後に出て来るコンマとの優先順位の関係にあります。( See section 演算子と優先順位,の優先順位の表を参照してください。)リスト演算子は 2 個以上の引数をとるのに対して、単項演算子が複数の引数をとることはありま せん。つまり、コンマは単項演算子の引数の終わりとなりますが、リスト演算子 の場合には、引数の区切りでしかありません。単項演算子は一般に、引数に対し てスカラコンテキストを与えるのに対して、スカラ演算子の場合には、引数に対 してスカラコンテキストを与える場合も、リストコンテキストを与える場合もあ ります。1 つのリスト演算子が両方のコンテキストを与える場合には、スカラ引 数がいくつか並び、最後にリスト引数が 1 つ続きます。(リスト引数は 1 つだ けです。)たとえば、splice() は 3 つのスカラ引数に 1 つのリスト引数が続き ます。
後に載せる構文記述では、リストをとり (そのリストの要素にリストコンテキス トを与える) リスト演算子は、引数として LIST をとるように書いています。そ のようなリストには、任意のスカラ引数の組み合わせやリスト値を含めることが でき、リスト値はリストの中に、個々の要素が展開されたように埋め込まれます。 1 次元の長いリスト値が形成されることになります。LIST の要素は、コンマで 区切られている必要がありあます。
下のリストの関数はすべて、引数の前後の括弧は省略可能となっています。(構 文記述では省略しています。)括弧を使うときには、単純な (しかし、ときには 驚く結果となる) 規則が適用できます: 関数に見えるならば、それは関数で、優 先順位は関係ない。そう見えなければ、それはリスト演算子か単項演算子で、優 先順位が関係する。また、関数と開き括弧の間の空白は関係ありませんので、と きに気を付けなければなりません:
print 1+2+3; # 6 と出力 print(1+2) + 3; # 3 と出力 print (1+2)+3; # これも 3! print +(1+2)+3; # 6 と出力 print ((1+2)+3); # 6 と出力
Perl に `-w' スイッチを付けて実行すれば、こういったものには警告を出 してくれます。たとえば、上記の 3 つめは:
print (...) interpreted as function at - line 1. Useless use of integer addition in void context at - line 1.
となります。スカラコンテキストでも、リストコンテキストでも使える関数は、 致命的でないエラーを示すために、スカラコンテキストでは未定義値を返し、リ ストコンテキストでは空リストを返します。
以下の規則を覚えておいてください:
それぞれの演算子や関数について、スカラコンテキストにおいて、どんな値を返 すのが望ましいかを吟味しています。ある種の演算子では、リストコンテキスト であったなら、返すはずのリストの長さを返すようにしています。いくつの演算 子は、リストの最初の値を返します。また、別の演算子は、演算がうまくいった 数を返すようにしています。一般に、一貫性さえ望まなければ、やりたいことが、 できるようになっています。
Go to the first, previous, next, last section, table of contents.