[pod] [xml]

NAME

perlfunc - Perl 組み込み関数

DESCRIPTION

この節の関数は、式の中で項として使うことができます。 これらは、大きく 2 つに分けられます: リスト演算子と名前付き単項演算子です。 これらの違いは、その後に出て来るコンマとの優先順位の関係にあります。  (perlop の優先順位の表を参照してください。) リスト演算子は 2 個以上の引数をとるのに対して、 単項演算子が複数の引数をとることはありません。 つまり、コンマは単項演算子の引数の終わりとなりますが、 リスト演算子の場合には、引数の区切りでしかありません。 単項演算子は一般に、 引数に対してスカラコンテキストを与えるのに対して、 スカラ演算子の場合には、引数に対してスカラコンテキストを与える場合も、 リストコンテキストを与える場合もあります。 1 つのリスト演算子が 両方のコンテキストを与える場合には、スカラ引数がいくつか並び、 最後にリスト引数が 1 つ続きます。 (リスト引数は 1 つだけです。) たとえば、splice() は 3 つのスカラ引数に 1 つのリスト引数が続きます。 一方 gethostbyname() は 4 つのスカラ引数を持ちます。

後に載せる構文記述では、リストをとり (そのリストの要素にリストコンテキストを与える) リスト演算子は、引数として LIST をとるように書いています。 そのようなリストには、任意のスカラ引数の組み合わせやリスト値を 含めることができ、リスト値はリストの中に、 個々の要素が展開されたように埋め込まれます。 1 次元の長いリスト値が形成されることになります。 LIST の要素は、コンマで区切られている必要があります。

以下のリストの関数はすべて、引数の前後の括弧は省略可能と なっています。 (構文記述では省略しています。) 括弧を使うときには、 単純な (しかし、ときには驚く結果となる) 規則が適用できます: 関数に見えるならば、それは関数で、優先順位は関係ありません。 そう見えなければ、それはリスト演算子か単項演算子で、優先順位が 関係します。 また、関数と開き括弧の間の空白は関係ありませんので、 ときに気を付けなければなりません:

    print 1+2+4;	# Prints 7.
    print(1+2) + 4;	# Prints 3.
    print (1+2)+4;	# Also prints 3!
    print +(1+2)+4;	# Prints 7.
    print ((1+2)+4);	# Prints 7.

Perl に -w スイッチを付けて実行すれば、こういったものには 警告を出してくれます。 たとえば、上記の 3 つめは、以下のような警告が出ます:

         print (...) interpreted as function at - line 1.
         Useless use of integer addition in void context at - line 1.

いくつかの関数は引数を全くとらないので、単項演算子としても リスト演算子としても動作しません。 このような関数としては timeendpwent があります。 例えば、time+86_400 は常に time() + 86_400 として扱われます。

スカラコンテキストでも、リストコンテキストでも使える関数は、 致命的でないエラーを示すために、スカラコンテキストでは 未定義値を返し、リストコンテキストでは空リストを返します。

以下に述べる重要なルールを忘れないで下さい: リストコンテキストでの 振る舞いとスカラコンテキストでの振る舞いの関係、あるいはその逆に ルールはありません。 2 つの全く異なったことがあります。 それぞれの演算子と関数は、スカラコンテキストでは、もっとも適切と 思われる値を返します。 リストコンテキストで返す時のリストの長さを返す演算子もあります。 リストの最初の値を返す演算子もあります。 リストの最後の値を返す演算子もあります。 成功した操作の数を返す演算子もあります。 一般的には、一貫性を求めない限り、こちらが求めることをします。

スカラコンテキストでの名前付き配列は、スカラコンテキストでのリストを 一目見たものとは全く違います。 コンパイラはコンパイル時にコンテキストを知っているので、 (1,2,3) のようなリストをスカラコンテキストで得ることはできません。 これはスカラコンマ演算子を生成し、コンマのリスト作成版ではありません。 これは初めからリストであることはないことを意味します。

一般的に、同じ名前のシステムコールのラッパーとして動作する Perl の関数 (chown(2), fork(2), closedir(2) など)は、以下に述べるように、 成功時に真を返し、そうでなければ undef を返します。 これは失敗時に -1 を返す C のインターフェースとは違います。 このルールの例外は wait, waitpid, syscall です。 システムコールは失敗時に特殊変数 $! をセットします。 その他の関数は、事故を除いて、セットしません。

Perl Functions by Category

(カテゴリ別の Perl 関数)

以下に、カテゴリ別の関数(キーワードや名前付き演算子のような、 関数のように見えるものも含みます)を示します。 複数の場所に現れる関数もあります。

Portability

Perl は Unix 環境で生まれたので、全ての共通する Unix システムコールに アクセスします。非 Unix 環境では、いくつかの Unix システムコールの 機能が使えなかったり、使える機能の詳細が多少異なったりします。 これによる影響を受ける Perl 関数は以下のものです:

-X, binmode, chmod, chown, chroot, crypt, dbmclose, dbmopen, dump, endgrent, endhostent, endnetent, endprotoent, endpwent, endservent, exec, fcntl, flock, fork, getgrent, getgrgid, gethostent, getlogin, getnetbyaddr, getnetbyname, getnetent, getppid, getprgp, getpriority, getprotobynumber, getprotoent, getpwent, getpwnam, getpwuid, getservbyport, getservent, getsockopt, glob, ioctl, kill, link, lstat, msgctl, msgget, msgrcv, msgsnd, open, pipe, readlink, rename, select, semctl, semget, semop, setgrent, sethostent, setnetent, setpgrp, setpriority, setprotoent, setpwent, setservent, setsockopt, shmctl, shmget, shmread, shmwrite, socket, socketpair, stat, symlink, syscall, sysopen, system, times, truncate, umask, unlink, utime, wait, waitpid

これらの関数の移植性に関するさらなる情報については、 perlport とその他のプラットホーム固有のドキュメントを参照して下さい。

Alphabetical Listing of Perl Functions