とほほのperl入門(リファレンス編)

とほほのWWW入門 > とほほのperl入門 > リファレンス編
2000年4月11日版

プログラム制御

if - 条件分岐する(もし・・・ならば)
else - 条件分岐する(さもなくば)
elsif - 条件分岐する(あるいは・・・ならば)
unless - 条件分岐する(もし・・・でなければ)
while - 繰り返す(・・・のあいだ)
for - 繰り返す(・・・から・・・のあいだ)
foreach - 繰り返す(配列の全要素に対して)
last - ループを抜ける
next - 次のループを繰り返す
redo - 今のループを繰り返す
goto - ジャンプする
do - 処理を実行する
eval - 処理を実行する
exit - スクリプトを終了する
die - スクリプトを終了する
dump - コアダンプする

サブルーチン・パッケージ・ライブラリ

sub - サブルーチンを定義する
return - サブルーチンから戻る
caller - サブルーチンの情報を返す
package - パッケージを開始する
require - ライブラリファイルを読み込む

ファイル入出力

open - ファイルをオープンする
close - ファイルをクローズする
read - ファイルからデータを読み出す
write - フォーマット付きの出力を行う
sysread - ファイルから直接読み込む
syswrite - ファイルへ直接書き込む
eof - ファイルの終端を判断する
stat - ファイルの属性を得る
lstat - ファイルの属性を得る
binmode - バイナリモードで読み書きする
fileno - ファイルディスクリプタを得る
flock - ファイルをロックする
getc - ファイルから1文字読み込む
seek - ファイルの読み込み・書き込み位置を変更する
tell - ファイルの読み込み・書き込み位置を得る
truncate - ファイルサイズを変更する
print - ファイルへ書き出す
printf - ファイルへフォーマット付きで書き出す
select - 未稿
fcntl - 未稿
ioctl - 未稿

ファイル操作

chmod - ファイルのモードを変更する
chown - ファイルのオーナーを変更する
rename - ファイル名を変更する
unlink - ファイルを削除する
utime - ファイルの時刻を変更する
link - リンクファイルを作成する
symlink - シンボリックリンクを作成する
readlink - シンボリックリンク数を得る

ディレクトリ操作

chdir - カレントディレクトリを変更する
chroot - ルートディレクトリを変更する
mkdir - ディレクトリを作成する
rmdir - ディレクトリを削除する

ディレクトリ読み出し

opendir - ディレクトリをオープンする
closedir - ディレクトリをクローズする
readdir - ディレクトリエントリを読み出す
rewinddir - 最初から読むようにする
telldir - 現在の位置を得る
seekdir - 現在の位置を変更する

文字列操作

length - 文字列長を得る
substr - 文字列の一部を取り出す
join - 複数の文字列を連結する
split - 文字列を分割する
index - 文字列の中から特定文字を探す
rindex - 文字列の中から特定文字を探す
sprintf - 値をフォーマッティングする
m/pattern/gio
/pattern/gio
q/string/
qq/string/
qx/string/
s/pattern/replacement/gieo
tr/pattern/replacement/cds
y/pattern/replacement/cds

時刻操作

time - 現在の時刻を得る
localtime - 時刻を得る
gmtime - 時刻を得る

配列制御

pop - 最後の要素を取り出す
push - 要素を最後に追加する
shift - 最初の要素を取り出す
unshift - 要素を最初に追加する
sort - 配列をソートする
grep - パターンマッチした要素を取り出す
reverse - 配列要素を逆順にする
splice - 配列要素を部分削除(置換)する

連想配列制御

delete - 連想配列変数を削除する
each - 連想配列の全要素を処理する
keys - 連想配列のキーの一覧を得る
values - 連想配列の値の一覧を得る

数学関数

atan2 - atan y/x
sin - sin x
cos - cos x
exp - eのn乗
sqrt - ルート
int - 整数値
log - log x
rand - 乱数
srand - 乱数を初期化する

データ変換

ord - 文字のASCIIコードを得る
oct - 8進数や16進数を解釈する
hex - 16進数を解釈する
pack - バイナリデータを生成する
unpack - バイナリデータを解釈する
scalar - スカラー値に変換する
vec - ビットフィールドを取り出す

プロセス制御

fork - 子プロセスを生成する
wait - 未稿
waitpid - 未稿

シグナル

alarm - アラームシグナルを発行する
kill - SIGKILLを送る

ソケット

socket - ソケットを作成する
socketpair - 未稿
bind - 未稿
listen - 未稿
connect - 未稿
recv - 未稿
send - 未稿
shutdown - 未稿
getpeername - 未稿
getsockname - 未稿
getsockopt - 未稿
setsockopt - 未稿
gethostbyname - ホスト名からIPアドレスを得る
getnetbyname - 未稿
getprotobyname - 未稿
getservbyname - 未稿
gethostbyaddr - IPアドレスからホスト名を得る
gethostent - 未稿
gethostent - 未稿
endhostent - 未稿
getnetent - 未稿
setnetent - 未稿
endnetent - 未稿
getprotoent - 未稿
setprotoent - 未稿
endprotoent - 未稿
getservent - 未稿
setservent - 未稿
endservent - 未稿

メッセージ

msgctl - 未稿
msgget - 未稿
msgsnd - 未稿
msgrcv - 未稿

セマフォ

semctl - 未稿
semget - 未稿
semop - 未稿

共有メモリ

shmctl - 未稿
shmget - 未稿
shmread - 未稿
shmwrite - 未稿

データベース

dbmopen - 未稿
dbmclose - 未稿

その他

crypt - パスワードをチェックする
defined - 定義されているか調べる
system - 外部コマンドを実行する
exec - 外部コマンドを実行する
local - ローカル変数を定義する
sleep - 数秒間待つ
undef - 変数などを未定義の状態にする
warn - エラーメッセージを出力する
wantarray - サブルーチンのコンテキストを調べる
study - 未稿
syscall - 未稿
umask - 未稿
pipe - 未稿
reset - 未稿
getlogin - 未稿
getpgrp - 未稿
setpgrp - 未稿
getppid - 未稿
getpriority - 未稿
setpriority - 未稿
getpwnam - 未稿
getgrnam - 未稿
getpwuid - 未稿
getgrgid - 未稿
getpwent - 未稿
setpwent - 未稿
endpwent - 未稿
getgrent - 未稿
setgrent - 未稿
endgrent - 未稿

alarm(expr)
alarm expr
expr秒後にアラームシグナル(SIGALRM)を発行する。 SIGALRMは、$SIG{'ALRM'}="関数名"; で捕獲する。 再設定したりexprに0を指定すると、以前の設定はキャンセルされ、以前の設定の残り時間が返される。 プラットフォームによってはサポートされていない場合もある。

atan2(y,x)
y/xのアークタンジェントを−π〜πの間で返す。

bind(SOCKET, name)

binmode(FILEHANDLE)
binmode FILEHANDLE
FILEHANDLEの入出力をバイナリモードで行うようにする。 UNIXでは意味が無いが、Windowsではバイナリファイルを読み書きする際にはバイナリモードにしなくてはならない。 さもないと、改行コード変換(CR LF ←→ LF)が行われてしまい、バイナリデータが破損してしまう。

caller(expr)
caller
サブルーチンの情報(パッケージ名、ファイル名、行番号)を得る。
    ($package, $filename, $line) = caller;

chdir(dirname)
chdir dirname
このプロセスにおけるカレントディレクトリを変更する。

chmod(mode, filelist)
chmod mode, filelist
filelistで指定したファイル(配列指定可能)のパーミッションを変更する。 変更が成功したファイルの個数を返す。

chop(list)
chop(string)
chop string
chop
文字列の最後の文字を削除して、その文字列を返す。 文字列を配列で与えた場合はすべての文字列の最後の文字を削除し、最後の文字列の結果を返す。 <FILEHANDLE>で読み込んだデータ末尾の "\n" を削るのに便利。 引数省略時はchop($_)と同じ。

chown(uid, gid, filelist)
chown uid, gid, filelist
filelist(配列指定可能)で指定したファイルのオーナーユーザーとオーナーグループを変更する。 uid, gidにはそれぞれユーザーIDとグループIDを指定する。 変更に成功したファイルの個数を返す。

chroot(dirname)
chroot dirname
このプロセスにおけるルートディレクトリを変更する。

close(FILEHANDLE)
close FILEHANDLE
openでオープンしたファイルハンドルをクローズする。 スクリプトが終了する時にはファイルは自動的にクローズされるが、 openしたファイルは使い終わったらクローズするのがお作法。

closedir(DIRHANDLE)
closedir DIRHANDLE
opendirでオープンしたディレクトリハンドルをクローズする。

connect(SOCKET,name)

cos(expr)
cos expr
cos
exprのcos(ラジアン単位)を返す。 expr省略時はcos($_)と同じ。

crypt(passwd,salt)
利用者のパスワードをファイルに保存する際、そのまま保存しておくと危険なので、crypt()で暗号化してから保存するとよい。暗号化したパスワードから元のパスワードを解読することは(多少)困難だが、元のパスワードをチェックすることは容易にできる。解読を困難にするために、saltにはドット(.)、スラッシュ(/)を含む2文字の英数文字をランダムに指定する。この2文字は暗号化されたパスワードの最初の2文字となる。
    # 暗号化したパスワード($epasswd)を得る
    srand();
    $passwd = "himitsu";
    $xx = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
        . "abcdefghijklmnopqrstuvwxyz"
        . "0123456789./";
    $salt = substr($xx, int(rand(64)), 1);
    $salt .= substr($xx, int(rand(64)), 1);
    $epasswd = crypt($passwd, $salt);
    # ファイルには $epasswd だけを保存する

    # 暗号化したパスワードでパスワードをチェックする
    # 同じ$saltで再度暗号化して同じ結果になればOK
    $salt = substr($epasswd, 0, 2);
    if ($epasswd eq crypt($passwd, $salt)) {
        print "Match!!\n";
    }

dbmclose(assoc_array)
dbmclose assoc_array

dbmopen(assoc_array,dbname,mode)

defined(expr)
defined expr
変数、配列、サブルーチンが定義されているかどうかを調べ、真または偽を返す。 値がヌル文字(または0、または空配列)なのか、それとも定義されていないのかを調べる事ができる。 いくつかの関数もundefineの値を返す事がある。
    defined($xx)              # 偽を返す
    $xx = ""; defined($xx)    # 真を返す
    $xx = 0; defined($xx)     # 真を返す

delete $assoc_array{key}
指定した連想配列を削除、つまり、undefineの状態にする。

die(list)
die list
perlスクリプトを終了する。 listをSTDERRに出力し、$!の値(もし$!が0なら($?>>8)の値)をperlスクリプトの戻り値とする。 evalの中で使用した場合はスクリプトを終了せず、listを$@に設定し、evalがundefineで終了する。 listの末尾に改行が無い場合は、スクリプト名や行番号などが末尾に付加される。
    open(IN, $file) || die "Can't open file.\n";
    open(IN, $file) || die "Can't open file. Stopped";

do { ... }
do subroutine (list)
do expr
... や Ssubroutineを実行する。 次の例では最後の式の値がdoの戻り値となる。
    $xx = do { $yy = 5; $zz = 8; }  # 戻り値は最後の式の値
次の例ではサブルーチンdoを呼び出して戻り値を返す。 (ただし、&add(5, 3)を用いるのが一般的。)
    sub add { return($_[0] + $_[1]); }
    print do add(5, 3);
次の例では libfile.pl という外部ファイルをperlのライブラリとして呼び出す。 (ただし、require "libfile.pl"; を用いるのが一般的。)
    do "libfile.pl";
doを用いて、if文、unless文、while文、until文の順序を変更することができる。
    do { print "5です。\n"; } if ($xx == 5);
    do { print "xx = $xx\n"; $xx++; } while ($xx < 5);

dump label
直ちにコアダンプしてスクリプトを終了する。 undumpコマンドでコアファイルから実行ファイルを生成して再実行すると、labelの場所から実行される。 変数の内容はダンプ前の状態が保存されるので、初期化処理をスキップした高速起動コマンドを生成できるが、ファイルディスクリプタは保存されない。

each(assoc_array)
each assoc_array
連想配列のすべての要素について処理を行う。
    while (($key, $value) = each(%xxx)) {
        print "$key = $value\n";
    }

else
ifと組み合わせて「さもなくば」の処理を行う。
    if ($xx == 5) {
        print "5です。\n";
    } else {
        print "5ではありません。\n";
    }

elsif
ifと組み合わせて「あるいは」の処理を行う。
    if ($xx == 5) {
        print "5です。\n";
    } elsif ($xx == 6) {
        print "6です。\n";
    } elsif ($xx == 7) {
        print "7です。\n";
    } else {
        print "5でも6でも7でもありません。\n";
    }

eof(FILEHANDLE)
eof()
eof
FILEHANDLEがオープンされていないか、オープンされているがファイルの終端に達している場合に1を返す。 eof()とした場合はコマンドラインで指定したすべてのファイルが終端に達した場合に、eofとした場合は最後に読み込んだファイルが終端に達した場合に1を返す。

eval(expr)
eval expr
eval { ... }
exprの値や...をperlのスクリプトとみなして実行する。 最後に実行した命令の結果が戻り値として返される。 perlがエラーメッセージを出して終了するような命令や、dieが実行された場合、undefineを返し、$@にエラーメッセージを格納する。 dbmopen, symlink, flockなど、実装されているかどうか分からない命令や、0除算の可能性のある割り算を行う際に、evalを用いてperlが異常終了するのを防ぐ事ができる。 (eval { ... }; のセミコロン( ; )に注意)
    print eval("3 * (5 + 3)") . "\n";

    $x = 10; $y = 0;
    $ans = eval { $x / $y; };
    if ($@) { warn "WARNING: $@"; }

    open(OUT, "> xx");
    eval { flock(OUT, 2); };
    if ($@) { warn "WARNING: flock isn't supported.\n"; }

exec(list)
exec list
listで指定した外部コマンドに処理を移す。 system()と異なり、exec()を呼び出した以降のスクリプトは実行されない。 出力がバッファリングされてしまうことがあるので、$| = 1; としておくことを奨める。

exit(expr)
exit expr
perlスクリプトを終了する。 終了コードとしてexprの値を返す。 省略時は0を返す。

exp(expr)
exp expr
exp
eのexpr乗を返す。 expr省略時はexp($_)と同じ。

fcntl(FILEHANDLE,function,scalar)

fileno(FILEHANDLE)
fileno FILEHANDLE
FILEHANDLEで示されるファイルのファイルディスクリプタを返す。 これはselectなどで用いられる。

flock(FILEHANDLE,operation)
他のプロセスが書込み中のファイルを読み込むと、不完全なデータを読み込んでしまい、それを書き戻した時点でファイルが破壊されることがある。これを防ぐためにflock()を用いてファイルをロック(排他制御)する。operationには次の値のいずれかを指定する。(まれに、数値の異なるシステムもあるかも)
    1   読み込み宣言ロック(ブロックモード)
    2   書き込み宣言ロック(ブロックモード)
    5   読み込み宣言ロック(非ブロックモード)
    6   書き込み宣言ロック(非ブロックモード)
    8   ロック解除(アンロック)
読み込み宣言ロックは「今から私が読み込むから、他の誰も書き込むな」という宣言であり、書き込み宣言ロックは「今から私が書き込むから、他の誰も読み込んだり書き込んだりするな」という宣言である。ただし、書き込みを禁止すると言っても、flock()を使用していないプロセスの書き込みまで禁止できる訳ではない。

ブロックモードでは、自分がロックをかけることができる状態になるまでプログラムが一時停止する。非ブロックモードでは、自分がロックをかけることができたか、できなかったをすぐに真または偽で返す。

flock()をサポートしていないシステムもあり、無理に使用するとperlが異常終了する。 汎用性のあるプログラムを記述する場合はevalを使用するとよい。

下記の例は2つの誤りを犯している。

    open(OUT, "> outfile.txt");
    flock(OUT, 2);
    print OUT "........";
    flock(OUT, 8);
    close(OUT);
ひとつ目はopen()を行った時点で、ロックを行うよりも前にファイルサイズを0にしてしまう点。ふたつ目は、printによる書き込みキャッシュがフラッシュされる前にflock(OUT, 8)でロックを解除してしまっている点である。上記のコードは次のように書かなくてはならない。close()を行った時やプログラムが終了する時には自動的にロックは解除される。
    open(OUT, "+< outfile.txt");
    flock(OUT, 2);
    truncate(OUT, 0);
    seek(OUT, 0, 0);
    print OUT "........";
    close(OUT);

for (expr1; expr2; expr3) { statements }
まずexpr1を実行し、その後、expr3を行いながらexpr2が真の間statementsを実行する。 次の例はいずれも、10回ループを実行する例である。
    for ($xx = 1; $xx <= 10; $xx++) {
        print "xx = $xx\n";
    }
    for (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) {
        print "xx = $xx\n";
    }
    for (1..10) {
        print "xx = $xx\n";
    }

foreach var (array) { statements }
配列の各要素に対して処理を行う。
    @zz = (11, 22, 33, 44, 55);
    foreach $xx ( @zz ) {
        print "xx = $xx\n";
    }

fork
子プロセスを生成し、親と子に分岐する。 親プロセスには子プロセスのIDが、子プロセスには0が返る。 forkをサポートしていないシステムもあり、無理に使用するとperlが異常終了する。 汎用性のあるプログラムを記述する場合はevalを使用するとよい。
    if ($pid = fork()) {
        print "これは親プロセスです。\n";
    } else {
        print "これは子プロセスです。\n";
    }

getc(FILEHANDLE)
getc FILEHANDLE
getc
FILEHANDLEから1文字読み込む。 FILEHANDLE省略時はSTDINから読み込む。 ファイルの終端に達するとヌル文字を返す。
    while ($c = getc(IN)) { print $c; }

getlogin

getpeername(SOCKET)

getpgrp(pid)
getpgrp pid

getppid

getpriority(which,who)

getpwnam(name)

getgrnam(name)

gethostbyname(name)
詳細説明は省略するが、次のようにしてホスト名をIPアドレスに変換することができる。
    $addr = (gethostbyname($host))[4];
    $addr = sprintf("%u.%u.%u.%u", unpack("C*", $addr));

getnetbyname(name)

getprotobyname(name)

getpwuid(uid)

getgrgid(gid)

getservbyname(name,proto)

gethostbyaddr(addr,addrtype)
詳細説明は省略するが、以下のようにしてIPアドレスからホスト名を求めることができる。
    $addr = "127.0.0.1";
    $host = gethostbyaddr(pack("C4", split(/\./, $addr)), 2);

getnetbyaddr(addr,addrtype)

getprotobynumber(number)

getservbyport(port,proto)

getpwent

getgrent

gethostent

getnetent

getprotoent

getservent

setpwent

setgrent

sethostent(stayopen)

setnetent(stayopen)

setprotoent(stayopen)

setservent(stayopen)

endpwent

endgrent

endhostent

endnetent

endprotoent

endservent

getsockname(SOCKET)

getsockopt(SOCKET,level,optname)

gmtime(expr)
gmtime expr
localtimeと同様だが、グリニッジ標準時の値を返す点が異なる。

goto label
labelの場所にジャンプする。 labelはラベル名にコロン(:)をつけて宣言し、コロン無しのラベル名を指定してジャンプする。

grep(expr,list)
配列から、パターンにマッチした要素を取り出す。 次の例は、配列@linesの中から "#include" で始まるものの配列を抜き出す。
    @result = grep(/^#include/, @lines);

hex(expr)
hex expr
exprを16進数の文字列と解釈してその値を返す。 expr省略時はhex($_)と同様。
    $ans = hex("FF");

if (expr) { statements }
exprが真であればstatementsを実行する。
    if ($xx > 5) {
        print "5より大きい\n";
    }

index(str,substr,position)
index(str,substr)
文字列の中から特定の文字列を探す。 文字列strposition番目(省略時は最初)から後方にsubstrを探していき、最初に現れる位置を返す。
    index("ABCDEFG", "DEF");   # 3を返す

int(expr)
int expr
int
exprの整数部を返す。 expr省略時はint($_)と同じ。

ioctl(FILEHANDLE,function,scalar)

join(expr,list)
join(expr,array)
arrayで与えられる文字列をexprの値で区切りながら連結する。
    $now = join(":", $hour, $min, $sec);

keys(assoc_array)
keys assoc_array
指定された連想配列のすべてのキーの一覧を配列で返す。

kill(sig,list)
kill sig,list
listで示すプロセスにSIGKILLシグナルを送る。 詳細はUNIXのシステムコールマニュアルを参照。

last label
last
最も内側のループを抜ける。 labelが指定されていればラベル名のループを抜ける。
    aaa: while (<IN>) {
        if (/^end/) last aaa;
    }

length(expr)
length expr
length
exprで与えられる文字列の長さを返す。 expr省略時はlength($_)と同じ。

link(oldfile,newfile)
ファイルをリンクする。 リンクされたファイルは実態が同じで、複数のパス名を持つファイルとなる。 oldfileに既存のファイル名、newfileに新規作成する新ファイル名を指定する。 成功時は1、失敗時は0を返す。

listen(SOCKET,queuesize)

local(list)
サブルーチン、eval、doの中でローカルな変数を定義する。 下記の例は3が表示されるが、local文を削除すると5が表示される。
    sub xxx { local($a); $a = 5 }
    $a = 3; &xxx; print $a;

localtime(expr)
localtime expr
time()やstat()で得られた時刻を地方時間帯の年月日時分秒などに分解する。
    ($sec, $min, $hour, $mday, $mon, $year,
        $wday, $yday, $isdst) =
         localtime($tt);
$sec, $min, ...はそれぞれ、秒数(0-59)、分(0-59)、時(0-23)、日(1-31)、月(0-11)、年(1900年からの年数(西暦の下2桁ではない))、曜日(日(0)-土(6))、年日数(1月1日を0とする)、$isdst(夏時間なら0以外の値)を表わす。

log(expr)
log expr
log
eを基とするexprのlogを返す。 expr省略時はlog($_)と同じ。

lstat(FILEHANDLE)
lstat FILEHANDLE
lstat(expr)
lstat scalar
statと同様だが、シンボリックリンクファイルの際、リンク先のファイルではなく、シンボリックリンクファイル自体の情報を得る。

m/pattern/gio

/pattern/gio

mkdir(filename,mode)
ディレクトリを作成する。 modeにはディレクトリのパーミッション(通常0755)を指定する。 成功時は1を返す。 失敗時は0を返し、$!を設定する。

msgctl(id,cmd,arc)

msgget(key,flags)

msgsnd(id,msg,flags)

msgrcv(id,var,size,type,flags)

next label
next
最も内側、もしくはlabelで指定したループの次の繰り返しを実行する。
    aaa: while (<IN>) {
        if (/^#/) { next aaa; }
    }

oct(expr)
oct expr
oct
exprが、0xで始まっていれば16進数として、それ以外なら8進数だと解釈してその値を返す。 次の例は、C言語の構文と同様に、0xで始まっていれば16進数、0で始まっていれば8進数、それ以外なら10進数と解釈する。
    $ans = ($xx =~ /^0/) ? oct($xx) : $xx;

open(FILEHANDLE,expr)
open(FILEHANDLE)
open FILEHANDLE
ファイルやコマンドをオープンし、ファイルハンドルを得る。 成功すれば非0を、失敗すればundefineを返す。 exprを省略した場合は、FILEHANDLEと同じ名前の変数の値がexprとみなされる。


ファイルを読み込みモードでオープンする。

    open(IN, "xxx.txt");
    while (<IN>) { print; }
    close(IN);
ファイルを書込みモードでオープンする。
    open(OUT, "> xxx.txt");
    print OUT "らくがき";
    close(OUT);
ファイルを読み書きモードでオープンする。
    open(F, "+< xxx.txt");
    $count = <F>;
    $count++;
    seek(F, 0, 0);
    print F $count;
    close(F);
ファイルを追加書込みモードでオープンする。
    open(OUT, ">> xxx.txt");
    print OUT "らくがき";
    close(OUT);
外部コマンドを起動し、その結果を読み込む。
    open(IN, "cat xxx.txt | nkf -j |");
    while(<IN>) { print; }
    close(IN);
外部コマンドを起動し、出力を渡す。
    open(OUT, "| nkf -j | /usr/lib/sendmail $mailto");
    print OUT "らくがき";
    close(OUT);
書き込み時、バッファリングしないようにする。
    open(OUT, "> xxx.txt");
    $old = select(OUT); $| = 1; select($old);

opendir(DIRHANDLE,expr)
ディレクトリ内のファイル一覧を得るためにディレクトリをオープンし、ディレクトリハンドルを得る。
    opendir(DIR, "tmp");
    while ($file = readdir(DIR)) { print "$file\n"; }
    closedir(DIR);

ord(expr)
ord expr
ord
exprの最初の文字のASCIIコードを数値で返す。 expr省略時は$_を見る。 例えばord("A")は65、ord("B")は66を返す。

pack(template,list)
バイナリデータを生成する。 templatelistがどんな形式のデータなのかを指定する。 後ろに数値を付けるとその個数分、アスタリスク(*)をつけるとlistの最後まで、バイナリデータに変換する。

  a  ASCII string(ヌル文字が補完される)
  A  ASCII string(スペースが補完される)
  b  bit string(昇順ビットオーダ)
  B  bit string(降順ビットオーダ)
  h  hex string(low nybble first)
  H  hex string(high nybble first)
  c  符号付き1バイト数値(-128 〜 127)
  C  符号無し1バイト数値(0〜255)
  s  符号付きshort数値(通常2バイト)
  S  符号無しshort数値(通常2バイト)
  i  符号付きint数値(通常4バイト)
  I  符号無しint数値(通常4バイト)
  l  符号付きlong数値(通常4バイト)
  L  符号無しlong数値(通常4バイト)
  n  short数値(ネットワークバイトオーダ)
  N  long数値(ネットワークバイトオーダ)
  x  ヌル文字
  X  back up a byte
  f  単精度浮動小数点
  d  倍精度浮動小数点
  p  文字列へのポインタ
  u  uuencodeされた文字列
  @  絶対位置までヌル文字を埋める


次のような使用例がある。

    pack("C*", 0x41, 0x42, 0x43); # 0x41 0x42 0x43
    pack("b*", "10101010"); # 0x55
    pack("a5", "abc"); # 0x41 0x42 0x43 0x00 0x00

package packagename
これ以降(ファイルの終わりか次のpackageが現れるまで)のスクリプトをpackagenameで示すパッケージとして扱うことを宣言する。 パッケージの内部では独自の変数名やサブルーチン名を持てるので、パッケージの内部と外部でたまたま変数名などが重複することによる悲劇を防ぐことができる。 パッケージ内の変数やサブルーチン名は「パッケージ名'変数名」で指定する。
    print &calc'add(3, 5);
    package calc;
    sub add { return($_[0] + $_[1]); }

pipe(READHANDLE,WRITEHANDLE)

pop(array)
pop array
配列の最後の要素を取り出す。取り出された要素は配列から削除される。配列に要素が無い場合はundefineを返す。

print(FILEHANDLE list)
print(list)
print FILEHANDLE list
print list
print
ファイルに文字列や変数の値を書き出す。 FILEHANDLEを省略すると標準出力(STDOUT)に書き出す。 listを省略すると $_ を書き出す。

printf(FILEHANDLE format, list)
printf(format, list)
printf FILEHANDLE format, list
printf format list
ファイルに文字列や変数の値をフォーマット付きで書き出す。 formatには書き出す文字列を指定するが、「パーセント(%)+なんとか」は続くlistのそれぞれの要素の値に変換される。 例えば、%s は文字列に、%d は整数値、%f は小数に変換される。 %10s や %10d はそれぞれ、10文字分の文字列、数値を表わす。 %-10s や %-10d は右揃えで表示する。 「バックスラッシュ( \ )+文字」は特殊文字として判断され、改行( \n )、タブ( \t )、復帰( \r )などと判断される。
    printf("Name=%s, Age=%d\n", $name, $age);

push(array,list)
配列の最後に要素(配列指定可能)を追加する。 arraylistが追加される。

q/string/

qq/string/

qx/string/

rand(expr)
rand expr
rand
0以上、expr未満のランダムな値(小数付き)を返す。 expr省略時はrand(1)と同じ。 (参照srand)

read(FILEHANDLE,scalar,length,offset)
read(FILEHANDLE,scalar,length)
ファイルハンドルからlengthバイト分のデータを読み出してscalarに格納する。 offsetを指定すると読み出したデータをscalaroffsetバイト目から格納する。 成功時は読み出したバイト数を、失敗時はundefineを返す。 バイナリデータを読み出す際に便利だが、MS-DOSなどではbinmodeを使用しなくてはならない場合がある。 テキストファイルを読み込むのであれば、readではなく、<FILEHANDLE>の形式を用いるのが一般的。

readdir(DIRHANDLE)
readdir DIRHANDLE
ディレクトリ内のエントリ(ファイルやディレクトリなど)の一覧を得る。 スカラー変数に代入する時は次のエントリを、配列変数に代入する時は残りのエントリの一覧を返す。 これ以上エントリが無い場合はundefine(配列の場合はヌルリスト)を返す。

readlink(filename)
readlink filename
シンボリックリンクの個数を得る。 サポートされていないプラットフォームでは致命的エラーとなる。

recv(SOCKET,scalar,length,flags)

redo LABEL
redo
最も内側、もしくはLABELで指定したループをもう一度繰り返す。

rename(OLDNAME,NEWNAME)
ファイル名を変更する。成功すれば1を、失敗すれば0を返す。

require(expr)
require expr
require
ライブラリファイルを読み込む。 ライブラリファイルは習慣的に.plの拡張子を持つperlスクリプトである。 exprを省略した場合は$_をファイル名とみなす。
    require "jcode.pl";

reset(expr)
reset expr
reset

return list
サブルーチンを終了する。 listをサブルーチンの戻り値とする。 return文を省略すると、最も最後の式の値が戻り値となる。
    sub add { return($_[0] + $_[1]); }

reverse(list)
reverse list
配列(または文字列)を逆順に並び替えたものを返す。 結果を配列として扱うか、スカラーとして扱うかで動作が異なる。
    @ans = reverse("abc", "def"); # ( "def", "abc" )が返される
    $ans = reverse("abc", "def"); # "cba"が返される。

rewinddir(DIRHANDLE)
rewinddir DIRHANDLE
readdirで最初から読み込めるようにする。

rindex(string,substr,position)
rindex(string,substr)
indexと同様。 文字列の後ろから探す点が異なる。

rmdir(filename)
rmdir filename
rmdir
ディレクトリを削除する。 成功時は1を返す。 失敗時は0を返し、$!を設定する。 filenameを省略すると$_を参照する。

s/pattern/replacement/gieo

scalar(expr)
exprで指定した値をスカラー値に変換して返す。

seek(FILEHANDLE,position,whence)
ファイルの読み込み・書き込み位置を変更する。 whenceが0の時はファイルの先頭からpositionバイト目に、whenceが1の時は現在の位置からpositionバイト移動した場所(負の数も指定可能)に、whenceが2の時はファイルの終わりからpositionバイト目に移動する。 成功すれば1、さもなくば0を返す。 (whenceの数値はシステムによって異なる場合がある?) open(OUT, ">> file.txt")のように、追加モードで開いたファイルの書き込み位置は、開いた時点でのファイルの終端より前に移動させることができない。この場合、open(OUT, "+< file.txt")を用いるとよい。

seekdir(DIRHANDLE,pos)
readdirで読み込むディレクトリ位置を変更する。 posにはtelldirが返す値を指定する。

select(FILEHANDLE)
select
select(rbits,wbits,ebits,timeout)

semctl(id,semnum,cmd,arg)

semget(key,nsems,size,flags)

semop(key,string)

send(SOCKET,msg,flags,to)
send(SOCKET,msg,flags)

setpgrp(pid,pgrp)

setpriority(which,who,priority)

setsockopt(SOCKET,lebel,optname,optval)

shift(array)
shift array
shift
配列の最初の要素を取り出す。 取り出された要素は配列から削除される。 配列に要素が無い場合はundefineを返す。

shmctl(id,cmd,arg)

shmget(key,size,flags)

shmread(id,var,pos,size)

shmwrite(id,string,pos,size)

shutdown(SOCKET,how)

sin(expr)
sin expr
sin
exprのsin(ラジアン単位)を返す。 expr省略時はsin($_)と同じ。

sleep(expr)
sleep expr
sleep
expr秒間処理を中断して待つ。exprを省略すると SIGALRM が発生するまで待ち、実際にまった秒数を返す。

socket(SOCKET,domain,type,protocol)
ネットワーク通信のためのソケットを作成する。次のようにして、WWWサーバーから http://www.xxx.zzz/index.html を簡単に読み取ることができる。ただし、socket()の引数の 2, 1, 0 は、OSによっては 2, 2, 0 だったりすることもあるので注意。
    $addr = (gethostbyname("www.xxx.zzz"))[4];
    $name = pack("S n a4 x8", 2, 80, $addr);
    socket(S, 2, 1, 0);
    connect(S, $name);
    binmode(S);
    select(S); $| = 1; select(stdout);
    print S "GET /index.html HTTP/1.0\r\n\r\n";
    while (<S>) { print; }
    close(S);

socketpair(SOCKET1,SOCKET2,domain,type,protocol)

sort(list)
sort list
sort(subroutine list)
sort subroutine list
sort { ... } list
配列の各要素をソートした結果を返す。 引数で指定した配列は変更されない。 以下の3パターンの使用方法がある。
    sub sortfunc { $a <=> $b }
    @result = sort @list;
    @result = sort sortfunc @list;
    @result = sort { $a <=> $b } @list;
この場合のsortfunc(名前は任意)などをソート関数とよぶ。 ソート関数には比較要素が $a, $b という名前で渡される。 結果として正、0、負のいずれかで返すようにする。

splice(array,offset,length,list)
splice(array,offset,length)
splice(array,offset)
配列要素を部分削除(置換)する。 arrayのうち、offset番目からlength個の要素をlistで置き換える。offsetは0から始まる。list省略時は削除する。length省略時はoffset番以降すべてが対象となる。

split(/pattern/,expr,limit)
split(/pattern/,expr)
split(/pattern/)
split
文字列を区切り文字で分割する。 /pattern/を区切り文字としてexprで与えられる文字列をLIMITを超えない範囲の個数に分割し、その配列を返す。 LIMITを省略した場合は個数の制限が無い。 exprを省略した場合は$_を分割する。 /pattern/を省略した場合はホワイトスペース(ひとつ以上の空白、タブ、または改行)で分割する。
    @hhmmss = split(/:/, "12:34:56");

sprintf(format,list)
printfと同様のフォーマットを行うが、ファイルへの書き出しは行わず、結果を文字列として返す。次の例は数値を文字列に変換する。
    $str = sprintf("%d", $number);

sqrt(expr)
sqrt expr
sqrt
exprのルートを返す。 expr省略時はsqrt($_)と同じ。

srand(expr)
srand expr
randの種を与える。 randは乱数を返すとは言っているが、プログラム起動後は常に同じパターンの値を返す。 このパターンの始まりを変更するために、プログラムの先頭でsrandを呼び出して無意味な値を指定してやる。 expr省略時はsrand(time)と同じ。

stat(FILEHANDLE)
stat FILEHANDLE
stat(expr)
stat scalar
ファイルのサイズや作成日付などを調べる。
    ($dev, $ino, $mode, $nlink, $uid, $gid, $rdev, $size,
     $atime, $mtime, $ctime, $blksize, $blocks) = stat($file);
返却値はそれぞれ、$dev(デバイス番号)、$ino(iノード番号)、$mode(パーミッションモード)、$nlink(リンク数)、$uid(作成者のユーザID)、$gid(作成者のグループID)、$rdev(???)、$size(バイト数)、$atime(最終アクセス時刻)、$mtime(最終更新時刻)、$ctime(作成時刻)、$blksize(ブロックサイズ)、$blocks(ブロック数)を意味する。 最終更新時刻を知りたい場合は次のようにするとよい。
    ($mtime) = (stat($file))[9];
exprにアンダーバー( _ )を指定すると、最後に実行したstatの結果をそのまま返す。 これは速度改善に役立つ。

study(scalar)
study scalar
study

sub funcname { ... }
サブルーチンを定義する。
    sub add {
        return($_[0] + $_[1]);
    }
    print &add(5, 6);

substr(expr,offset,length)
substr(expr,offset)
文字列の一部を取り出す。 exprで与えられる文字列のうちoffset文字からlength文字分を返す。 最初の文字は通常0文字目だが、$[により変化する。 offsetが負の値の時は$[に関わらず、文字列の最後から-offset文字目(最後の文字は1文字目)から後ろ方向にlength文字分を返す。 lengthを省略すると残りの全てを返す。 substr()は式の左辺にも使用できる。

symlink(oldfile,newfile)
oldfileを指し示すシンボリックファイルnewfileを作成する。 サポートされていないシステムでは致命的エラーとなるので eval を用いる。

syscall(list)
syscall list

sysread(FILEHANDLE,scalar,length,offset)
sysread(FILEHANDLE,scalar,length)
ファイルからoffsetバイト移動した場所からlengthバイト分、scalarに読み込む。 read()と異なりバッファリングしないので、同時に用いると混乱が生ずる。 通常は実際に読み込んだバイト数を、失敗時はundefを返す。

system(list)
system list
listで指定した外部コマンドを実行する。その実行コマンドの戻り値がsystem()の戻り値となる。

syswrite(FILEHANDLE,scalar,length,offset)
syswrite(FILEHANDLE,scalar,length)
ファイルのoffsetバイト移動した場所からlengthバイト分、scalarの内容を書き込む。 printなどと異なりバッファリングしないので、同時に用いると混乱が生ずる。 通常は書き込んだバイト数を、失敗時はundefを返す。

tell(FILEHANDLE)
tell FILEHANDLE
tell
ファイルの現在の読み込み・書き込み位置を得る。

telldir(DIRHANDLE)
telldir DIRHANDLE
現在のディレクトリ位置を返す。 この値はseekdirで用いられる。

time()
time
現在の時刻を得る。 グリニッジ標準時の1970年1月1日0時0分0秒からの秒数を返す。 localtime()やgmtime()で変換する。

tr/searchlist/replacement/cds

y/searchlist/replacement/cds

truncate(FILEHANDLE,length)
truncate(expr,length)
指定したファイルのサイズを変更する。 サポートしていないシステムでは致命的エラーとなる。

umask(expr)
umask expr
umask

undef(expr)
undef expr
undef
変数やサブルーチン名を指定して、これらを、定義されていない状態に戻す。

unless
if文と逆の意味で、「もし・・・でなければ」の処理を行う。
    unless ($xx == 5) { print "5ではありません。\n"; }

unlink(list)
unlink list
ファイルを削除する。削除に成功したファイルの個数を返す。

unpack(template,expr)
バイナリデータを解釈する。 templatepackのものと同様。
    unpack("C", "A")  # AのASCIIコード0x41を返す

unshift(array,list)
配列の最初に要素(配列指定可能)を追加する。 arraylistが追加される。

until (expr) { statements }
whileの逆で、exprが真になるまで、statementsを繰り返します。

utime(atime, mtime, filelist)
utime atime, mtime, filelist
filelistで指定したファイルのアクセス時刻(atime)と更新時刻(mtime)を変更し、変更に成功したファイルの個数を返す。 atimemtimetimeで得られるような値を用いる。

values(assoc_array)
values assoc_array
指定された連想配列のすべての値の一覧を配列で返す。

vec(expr,offset,bits)

wait

waitpid(pid,flags)

wantarray
サブルーチンの中で使用し、サブルーチンの戻り値が配列を期待しているかどうかを調べる。次の例は、@xx = &func() で呼び出すと空配列を返し、$xx = &func() で呼び出すと undef を返す。
    sub func { return wantarray ? () : undef; }

warn(list)
warn list
dieと同様のメッセージをSTDERRに出力するが、プロセスは終了しない。

while (expr) { statements }
exprが真のあいだ、statementsを繰り返します。
    $xx = 1;
    while ($xx < 10) {
        print "xx = $xx\n";
        $xx++;
    }

write(FILEHANDLE)
write(expr)
write
format文で指定したフォーマットに従って出力を行う。詳細説明省略。 sysread()に対応するのはsyswrite()だが、read()に対応するのはwrite()ではない。

Copyright (C) 1996-1999 とほほ
http://wakusei.cplaza.ne.jp/twn/wwwperl2.htm