Return to Main
abs
SampleCode
abs VALUE
引数の絶対値を返します。引数が省略された場合は $_ が使用されます。

accept
SampleCode
accept NEWSOCKET,GENERICSOCKET
システムコールの accept(2) のように、ソケットの接続を待ち受けます。成功した場合、パックされたアドレスを返します。失敗した場合は、それ以外です。サンプルは perlipc マニュアルの"Sockets: Client/Server Communication"セクションを参照してください。

closeonexecフラグがサポートされているシステム上では、フラグは" $^F "から決定される新しく開かれたファイル記述子に設定されます。" $^F "については、 perlvar マニュアルの" $^F "セクションを参照してください。

alarm
SampleCode
alarm SECONDS
SECONDS 秒後に SIGALRM を実行中のプログラムに対して発生します。引数を省略した場合は、 $_ が使用されます。

タイマは1度に1つしか使用できません。再度呼び出すと、タイマはリセットされ、残り時間を戻り値として返します(0をセットすると、タイマのキャンセルのみを行います)。また、 alarmsleep を同時に呼び出すことは避けてください。

タイマは1秒程度遅れる場合もあります。遅れを気にする場合は、 sleep を参照してください。

atan2
SampleCode
atan2 Y,X
-π~πの範囲で、Y/Xのアークタンジェントを返します。タンジェントを求めたい場合は、 Math::Trig::tan 関数を利用するか、次の公式を利用してください。
    sub tan { sin($_[0]) / cos($_[0])  }

bind
SampleCode
bind SOCKET,NAME
ネットワークアドレスをソケットにバインドします。成功すれば真を返します。失敗した場合は、それ以外です。 NAME はパックされたアドレスです。サンプルは perlipc マニュアルの"Sockets: Client/Server Communication"セクションを参照してください。

binmode
SampleCode
binmode FILEHANDLE
バイナリモードとテキストモードが区別されるシステムにおいて、ファイルの読み書きをバイナリモードで行うことを宣言します。区別されないシステムでは無視されます。

bless
SampleCode
bless REF,[CLASSNAME]
リファレンス( REF )が CLASSNAME パッケージ(省略された場合は現在のパッケージ)になったことを伝えます。 bless はしばしばコンストラクタの最後で使用されるため、利便性のために戻り値としてリファレンス( REF )を返すようになっています。

詳細は perlmod のマニュアルを参照してください。

caller
SampleCode
caller EXPR
現在のサブルーチンに関する情報を返します。スカラーコンテキストで呼び出された場合、呼び出されたパッケージの名前を返し、リストコンテキストの場合は以下のように、パッケージ名、ファイル名、現在の行数からなるリストを返します。
	($package, $filename, $line) = caller;

引数付きで呼び出した場合、現在のフレームから、 EXPR 分、後戻りしたフレームの情報を返します。
	($package, $filename, $line, $subroutine, $hasargs,
    	$wantarray, $evaltext, $is_require, $hints, $bitmask) = caller($i);

chdir
SampleCode
chdir EXPR
可能なら EXPR へディレクトリを移動します。引数を省略した場合、 $ENV{HOME} で取得できるディレクトリへ移動します。移動できなかった場合は $ENV{LOGDIR} への移動を試み、それもできない場合は、何もしません。移動できた場合は、真を返し、失敗した場合はそれ以外です。

chmod
SampleCode
chmod LIST
指定されたファイルのパーミッションを変更します。 MODE は文字列ではなく8進数(つまり、0755や0666などの形式)で指定します。戻り値は変更に成功したファイルの数です。

chomp
SampleCode
chomp VARIABLE
chomp LIST
指定された文字列、もしくはリストの各文字列の末尾から $\ $INPUT_RECORD_SEPARATOR )に指定されているもの(通常、改行文字)を取り除きます。戻り値として、取り除いた文字の総数を返します。レコードを記録する際に、改行文字を取り除く場合によく使われます。段落モード($/ = "")の場合、文字列の最後にある改行文字を全て削除します。slurpモード($/ = undef)、または固定長レコードモード($/が整数へのリファレンスなどの場合。 perlvar のマニュアルを参照)の場合、 chomp は何もしません。 VARIABLE を省略した場合には、 $_ が使用されます。

chop
SampleCode
chop VARIABLE
chop LIST
指定された文字列、もしくはリストの各文字列の末尾から無条件に1文字取り除き、その取り除いた文字を戻り値として返します。引数が省略された場合は $_ が使用されます。ハッシュを渡した場合は、 value chop します( key には影響しません)。

chown
SampleCode
chown LIST
リストのファイルの所有者(とグループ)を変更します。リストの最初の二つは数値で表した uid gid で、順番はこの順です。-1を指定すると、変更を行いません。戻り値は変更に成功したファイル数です。
    $cnt = chown $uid, $gid, 'foo', 'bar';
    chown $uid, $gid, @filenames;

chr
SampleCode
chr NUMBER
キャラクターセットのうち、 NUMBER に対応する値を返します。たとえば、ASCIIにおいて、" chr(65) "は"A"を返しますが、Unicodeでは" chr(0x263a) "が"A"を返します。引数が省略された場合は $_ が使用されます。

chroot
SampleCode
chroot FILENAME
同名のシステムコールと同じで、ルートディレクトリとして認識するディレクトリを指定します。スーパーユーザーのみ使用可能。引数が省略された場合は $_ が使用されます。

close
SampleCode
close FILEHANDLE
ファイルハンドルに結びつけられたファイル、もしくはパイプを閉じます。バッファのフラッシュに成功すれば真を返します。引数を省略した場合は、カレントのファイルハンドルを閉じます。

すでにオープンされているファイルハンドルを、もう一度オープンし直すと、まず自動的にクローズされますので、必ずしもクローズする必要はありません。しかし、明示的にクローズしないと、行カウンタ( $. )はリセットされません。

ファイルハンドルがパイプにバインドされている場合で、関連するシステムのいずれかが失敗を返した場合、またはプログラムが0以外のステータスで終了した場合は、戻り値として偽を返します。パイプを閉じる時にはプロセスの終了を待ち、 $? に入っているステータス値を戻り値として返します。

closedir
SampleCode
closedir DIRHANDLE
opendir によって開かれたディレクトリを閉じます。

connect
SampleCode
connect SOCKET,NAME
システムコールとしてリモートソケットへの接続を試みます。成功した場合、真を返します。 NAME はソケットに適したタイプのパックされたアドレスであるべきです。サンプルは perlipc マニュアルの"Sockets: Client/Server Communication"セクションを参照してください。

continue
SampleCode
continue BLOCK
制御構文です。通常、 while 文や foreach 文と共に使用されます。 next , redo , last を使用した場合に実行するブロックを制御することができます。ループ内で redo を使用した場合、もう一度ループブロックを実行します。 next を使用した場合、 continue ブロックを実行したあと、もう一度ループ条件を判定します。 last を使用した場合、 continue ブロックを実行せずにループから抜けます。(他の言語における continue とは意味合いが異なります。条件を評価してのループ再実行は next で行います)

cos
SampleCode
cos EXPR
コサインの値を返します。引数が省略された場合は $_ が使用されます。コサインの逆関数を求めたい場合は、 Math::Trig::acos() 関数を利用するか、次の公式を利用してください。
  sub acos { atan2( sqrt(1  $_[0] * $_[0]), $_[0] ) }

crypt
SampleCode
crypt PLAINTEXT,SALT
C言語ライブラリの crypt(3) と同等の処理を行います。 SALT の先頭2文字を利用して、 PLAINTEXT の先頭8文字を暗号化し、[./0-9A-Za-z]から成る13文字の文字列を返します。生成される文字列の先頭2文字は SALT の先頭2文字と一致します。

SALT も[./0-9A-Za-z]から成る文字列です( join '', ('.', '/', 0..9, 'A'..'Z', 'a'..'z')[rand 64, rand 64] のようなコードで生成できます)。

複合化が行えないため、大量のデータを暗号化するのには向きません。CPANの Crypt PGP モジュールを参考にしてください。

ユニコード文字列で crypt を使用する時には、Perlは自動的に8bit文字列へ変換しようとしますが、失敗した場合は die されます。

dbmclose
SampleCode
dbmclose HASH
この関数は後方互換性のために残され、現在は untie に置き換えられています。 untie を呼び出し、DBMとハッシュのバインドを解除します。

dbmopen
SampleCode
dbmopen HASH,DBNAME,MASK
この関数は後方互換性のために残され、現在は tie に置き換えられています。DBMファイルをハッシュにバインドします。 MASK undef を指定すると新規ファイルの生成を行いません。

defined
SampleCode
defined EXPR
EXP が値を持つかどうかのbool値を返します。空文字列か、未定義かの判断や、サブルーチンが定義されているかをチェックできます。引数が省略された場合は $_ が使用されます。

delete
SampleCode
delete EXPR
ハッシュや配列から指定された値を削除します。通常、削除された値を返しますが、データベースなどに tie されたハッシュに関してはその動作は保証されません。

die
SampleCode
die LIST
eval ブロックの外であれば、リストの値を STDERR に出力し、現在値を $! としてプログラムを終了します。

do
SampleCode
do BLOCK
正式な関数ではありません。引数のブロックを実行し、最後に実行されたコマンドの戻り値をdoの戻り値として返します。ループ制御文として使用した場合、一度実行したあとに条件式を判定します。

do
SampleCode
do EXPR
引数としてPerlスクリプトファイルを指定し、do記述部にスクリプトファイルを埋め込みます。
    do 'stat.pl';

は、以下と同様の動作をします。(UNIX環境のみ)
    scalar eval `cat stat.pl`;

dump
SampleCode
dump LABEL
プログラム実行中に、直前までの状態をコアダンプします。

each
SampleCode
each HASH
リストコンテキストで呼び出した場合、次のキーと値のリストを返します。スカラーコンテキストで呼び出した場合は次のキーのみを返します。繰り返し呼び出すことで、値を順に取り出すことができます。取り出す値の順番は見かけ上、ランダムです。ハッシュの最後まで来た場合、空リストを返し、もう一度呼び出すことで最初に戻ります。 keyssortvalues なども参照。

eof
SampleCode
eof FILEHANDLE
eof ()
FILEHANDLE から次に読み込む時、ファイルの最後であれば、1を返します。また、 FILEHANDLE が開かれていない場合も1を返します。引数のない場合は、最後に読み込んだファイルをテストします。 eof() と呼び出した場合、コマンドラインで指定したファイルのうち、最後の物のみをテストします。

eval
SampleCode
eval EXPR
eval BLOCK
引数の式、もしくはブロックを小さなPerlプログラムとして評価します。引数が省略された場合は $_ が使用されます。 eval ブロック内で代入した変数や、サブルーチン、フォーマットの宣言は eval ブロック外でも有効です。

exec
SampleCode
exec LIST
exec PROGRAM LIST
システムコマンドを実行し、その後、制御を戻しません(制御を戻す必要がある場合は、"system"を使用てください)。また、コマンドの実行は、`(バッククオート)や open でパイプを使うことでも可能です。

exists
SampleCode
exists EXPR
ハッシュ、もしくは配列が宣言されているかどうかをチェックします。値が存在しなくても(空文字列でも)、宣言されていれば真をかえします。

exit
SampleCode
exit EXPR
引数を終了コードとしてプログラムを終了する。引数を省略した場合は、0として終了します。一般的に、0は正常終了、1は異常終了です。また、サブルーチン内での使用は推奨されません。 die も参照のこと。

exp
SampleCode
exp EXPR
eの EXPR 乗を返します引数が省略された場合は $_ が使用されます。

fcntl
SampleCode
fcntl FILEHANDLE,FUNCTION,SCALAR
Fcntl モジュールを利用して、ファイルの制御処理( FUNCTION )を行います。詳細は Fcntl モジュールの説明を参照してください。

fileno
SampleCode
fileno FILEHANDLE
FILEHANDLE のファイル記述子(descriptor)を返します。ファイルハンドルが開かれていない場合は undef を返します。

flock
SampleCode
flock FILEHANDLE,OPERATION
FILEHANDLE に対して、ファイルロック処理" OPERATION "を行います。 OPERATION は共有ロック" LOCK_SH(1) "、排他ロック" LOCK_EX(2) "、ロック解除" LOCK_UN(8) "のいずれかです。" LOCK_NB(4) "は LOCK_SH LOCK_EX とorをとって使用し、 flock が処理をブロックせずにすぐに戻るようにします。

fork
SampleCode
fork
新しいプロセスを作り、即実行します。戻り値として子のpidを親に返します。0もしくは undef が返った場合、 fork は失敗しています。

getc
SampleCode
getc FILEHANDLE
FILEHANDLE に結びつけられたファイルから次の一文字を読み込みます。ファイルの終端、もしくはエラーであれば undef を返します。引数を省略した場合には、 STDIN から読み込みます。

getlogin
SampleCode
getlogin
Cライブラリの同名の関数と同様の動作をして、/etc/utmpから現在のログイン名を返します。もしnullが返る場合は、 getpwuid を使ってください。
	$login = getlogin || getpwuid($<) || "Kilroy";

getpeername
SampleCode
getpeername SOCKET
SOCKET のコネクション先のパックされたソケットアドレスを返します。

getpgrp
SampleCode
getpgrp PID
PID の現在のプロセスグループを返します。0を指定した場合、現在のプロセスのプロセスグループを返します。引数を省略した場合は0を指定した場合と同様の動作をします。

getppid
SampleCode
getppid
親のプロセスIDを返します。

getpriority
SampleCode
getpriority WHICH,WHO
プロセス、プロセスグループ、ユーザーの現在の優先度を返します。

getsockname
SampleCode
getsockname SOCKET
SOCKET のコネクション元(自分側)のパックされたソケットアドレスを返します。

getsockopt
SampleCode
getsockopt SOCKET,LEVEL,OPTNAME
SOCKET に設定されているオプションを返します。エラーの場合は undef を返します。

glob
SampleCode
glob EXPR
引数をファイル名展開(ワイルドカードの展開)行い、呼び出すたびに順にマッチするファイル名を返します。引数を省略した場合は、 $_ が使用されます。リストコンテキストでの呼び出しが望ましいでしょう。
"<EXPR>"を内部実装した物で、機能的には同じです。(ファイルハンドルの読み込みに似ているので、解りやすくするために使うのが良いかもしれません)

gmtime
SampleCode
gmtime EXPR
time関数の戻り値を世界標準時の8つの要素に変換します。
#  0    1    2     3     4    5     6     7
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = gmtime(time);
# 秒  分  時  日  月   年 曜日  年日

月は0~11、年は1900年からの経過年、年日は1~365(閏年は1~366)、曜日は0~6で日曜から始まります。

goto
SampleCode
goto LABEL
goto EXPR
goto &NAME
LABEL を指定した場合、 LABEL から実行を開始します。条件判断を必要とするループ内部に飛ぶことはできませんが、それ以外の場所であればどこであっても飛ぶことができます。 EXPR に式を指定した場合、一致するラベルから実行します。
	goto ("FOO", "BAR", "GLARCH")[$i];

&NAME を指定した場合、現在実行中のサブルーチンを指定したサブルーチンで置き換えます。

grep
SampleCode
grep BLOCK LIST
grep EXPR,LIST
LIST の各要素を一時的に $_ にセットし、式、もしくはブロックを順に評価します。たとえば、コメント行を削除する場合には以下のように処理します。二つの式は同等の処理を行います。
	@foo = grep(!/^#/, @bar);    # コメント行削除

	@foo = grep {!/^#/} @bar;    # コメント行削除

hex
SampleCode
hex EXPR
EXPR の16進数を、10進数に変換します。引数が省略された場合は $_ が使用されます。

index
SampleCode
index STR,SUBSTR,[POSITION]
STR のから、最初に SUBSTR が出現する場所を返します。存在しない場合は、-1を返します。 POSITION を指定した場合は、その位置から探し始めます。

int
SampleCode
int EXPR
引数の整数部を返します。引数が省略された場合は $_ が使用されます。ただし、桁丸めには使用すべきではありません。たとえば、"int(-6.725/0.025)"は-268を返しますが、正しくは-269です。通常、 sprintfprintf POSIX::floor POSIX::ceil などを利用します。

join
SampleCode
join EXPR,LIST
EXPR を分割子として LIST の値を一つの文字列に連結し、その値を返します。
	$rec = join(':', $login,$passwd,$uid,$gid,$gcos,$home,$shell);

分割するには split を使用します。

keys
SampleCode
keys HASH
指定したハッシュのすべてのキーのリストを返します。スカラコンテキストで実行した場合は、キーの要素数を返します。その順番は見かけ上ランダム(将来変更される可能性はあります)ですが、 valueseach が返す順番と同一であることは保証されます。

kill
SampleCode
kill SIGNAL, LIST
LIST のプロセスに指定したシグナルを送ります。戻り値はシグナルの送信に成功した数です。

last
SampleCode
last LABEL
C言語の break 関数と同等の処理を行い、ループから抜けだします。 LABEL が指定されていない場合は、最も内側のループから抜け出します。

lc
SampleCode
lc EXPR
EXPR を小文字にしたものを返します。引数が省略された場合は $_ が使用されます。これは、ダブルクオート文字列内部において使用される" \L "エスケープを、内部関数としてインプリメントしたものです。

lcfirst
SampleCode
lcfirst EXPR
EXPR の先頭一文字を小文字にした物を返します。引数が省略された場合は $_ が使用されます。これは、ダブルクオート文字列内部において使用される" \l "エスケープを、内部関数としてインプリメントしたものです。

length
SampleCode
length EXPR
EXPR の文字数を返します。引数が省略された場合は $_ が使用されます。配列やハッシュの数を取得することはできません。配列では" scalar @array "、ハッシュでは" scalar keys %hash "を利用します。

link
SampleCode
link OLDFILE,NEWFILE
OLDFILE から NEWFILE へリンクを張ります。成功すれば真を返し、失敗ならばそれ以外を返します。

listen
SampleCode
listen SOCKET,QUEUESIZE
システムコールを SOCKET で待ち受けます。成功すれば真を返し、失敗ならばそれ以外を返します。

local
SampleCode
local EXPR
多くの人が考えるのとは異なり、" my "と" local "は別物で、代用することはできません。" my "の詳細については、 perlsub マニュアルを参照してください。" local "は一番内側のブロック、ファイル、 eval の中で、一時的な値を持つ変数を宣言します。複数の変数を宣言する場合には、括弧で囲まなければいけません。 local で宣言された変数が、ブロック外で使用されていた場合、一時的に上書きされ、ブロックから出た次点で元の値に戻されます。

localtime
SampleCode
localtime EXPR
time関数の戻り値をローカルタイムの9つの要素に変換します。
#  0    1    2     3     4    5     6     7     8
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);

基本的に、戻り値の形式は gmtime の物と同様です。夏時間の期間であれば、 $isdst は真になります。

lock
SampleCode
lock THING
THING に含まれる変数、サブルーチン、リファレンスに対して、 lock のスコープから出るまでアドバイザリロックを置きます。threadingを有効にしてビルドしたPerlでのみ有効です。詳細はスレッドに関するマニュアルを参照。

log
SampleCode
log EXPR
eを底とする自然対数を返します。引数が省略された場合は $_ が使用されます。他の数を底とするlogが必要な場合は代数学を利用します。
例:
	sub log10 {		my $n = shift;		return log($n)/log(10);	}

lstat
SampleCode
lstat FILEHANDLE
lstat EXPR
stat 関数とほぼ同様ですが、対象のファイルがシンボリックリンクだった場合、シンボリックリンクが指すファイルの情報ではなく、シンボリックリンク自体の情報を返します。シンボリックリンクが実行されていないシステムでは、 stat 関数と同じ動作をします。

map
SampleCode
map BLOCK LIST
map EXPR,LIST
一時的に LIST の値を $_ に設定して、 BLOCK(EXPR) を実行、それぞれの評価値を一つのリストとして返します。スカラコンテキストで評価した場合、生成された要素数を返します。
 例)リストの数字に対応する文字を返す
    @chars = map(chr, @nums);

  例)以下の二つは同じ動作をする
    %hash = map { getkey($_) => $_ } @array;

    %hash = ();
    foreach $_ (@array) {
        $hash{getkey($_)} = $_;
    }

mkdir
SampleCode
mkdir FILENAME,[MASK]
FILENAME のディレクトリを作成し、 MASK が指定されていれば、パーミッションをその値にします。成功すれば、真を返し、失敗すれば偽を返して、 $! を設定します。 MASK を省略した場合、デフォルトの0777が使用されます。

my
SampleCode
my EXPR (: ATTRIBUTES)
EXPR の変数をブロック、ファイル、 eval 内部のみに局所化します。カンマよりも優先順位が高いため、複数指定する場合は括弧で囲む必要があります。より詳しい説明はサブルーチンのマニュアルを参照してください。

next
SampleCode
next LABEL
LABEL として指定されたループ、ラベルが省略された場合は最も内側のループに対し、次の繰り返しを行います。 continue ブロックがあれば、 continue ブロックを実行してから、次の繰り返しに移る。 lastredo なども参照してください。
	LINE: while (<STDIN>) {
		next LINE if /^#/;      # discard comments
		#...
	}

ただし、 evalsubdogrepmap などから抜けるために使うべきではありません。

no
SampleCode
no Module LIST
use 関数を参照。それの反対の動作をします。

oct
SampleCode
oct EXPR
引数を8進数として解釈し、その値を10進数になおした値を返します( EXPR が0xで始まる場合は16進数として、0bで始まる場合はバイナリとして解釈します)。引数が省略された場合は $_ が使用されます。
	$val = oct($val) if $val =~ /^0/;
	$oct_perms = sprintf "%lo", $perms;

この関数の逆変換を行う場合は、 sprintf() もしくは printf() を使用します。
	$perms = (stat("filename"))[2] & 07777;
	$oct_perms = sprintf "%lo", $perms;

一般的に"644"のような文字列を利用して、ファイルモードを変更する場合などに利用されます。

open
SampleCode
open FILEHANDLE(,MODE,LIST)
open FILEHANDLE,EXPR
EXPR として与えられたファイル名のファイルを FILEHANDLE にバインドします。 MODE に"<"を指定した場合、もしくは何も指定しなかった場合、ファイルを読み込みモードで開きます。">"を指定した場合、書き込みモードで開きます。">>"を指定した場合、追記モードで開きます。">"か"<"の前には"+"を付けた場合、読み書き両用モードで開きます。他の用法も多いため、より詳しい説明はマニュアルを参照してください。

opendir
SampleCode
opendir DIRHANDLE,EXPR
EXPR で指定された名前のディレクトリを、 readdirtelldirseekdirrewinddirclosedir で処理できるように開き、成功すれば真を返します。ディレクトリハンドルとファイルハンドルは独立したネームスペースを持っています。

ord
SampleCode
ord EXPR
EXPR の最初の文字の数値(ASCII もしくは Unicode)を返します。引数が省略された場合は $_ が使用されます。この関数の逆変換には chr を使います。

our
SampleCode
our EXPR
ブロック、ファイル、もしくは eval 内で有効な変数の宣言を行います。すなわち、 my と同じようなスコープを持ちますが、これはローカル変数を作成しません。1つ以上の変数を宣言する場合は、括弧で囲む必要があります。" use strict vars "を宣言していないのであれば、この関数は意味を持ちません。また、" our "はパッケージの境界のような全レキシカル・スコープをまたがって有効なグローバル変数を宣言できます。宣言は使用されるポイントではなく、入力のあるパッケージで行います。

pack
SampleCode
pack TEMPLATE,LIST
LIST を受け取り、それを TEMPLATE のルールに従って変換した物を返します。
    a   バイナリデータによる文字列。ヌル文字を詰めます。
    A   (ASCII)文字列。スペースを詰めます。
    Z   (ASCIZ)ヌル終端文字。ヌル文字を詰めます。

    b   ビットストリング(下位から上位ビットの順。 vec() に似ています)
    B   ビットストリング(上位から下位ビットの順)
    h   16進文字(下位ニブルが始め)
    H   16進文字(上位ニブルが始め)

    c   符号付きchar値
    C   符号なしchar値。バイトのみ。Uを参照

    s   符号付きshort値
    S   符号なしshort値
        (このshortは正確に16ビットです。ローカルのCコンパイラとは異なる
          かも知れません。同じにしたい場合は後ろに'!'を付けます)

    i   符号付き整数値
    I   符号なし整数値
        (この整数は多くの場合に32ビットです。ローカルのCコンパイラでint
          と呼ばれる値に依存します。次のlongと同じ、もしくはより大きな
          値になります)

    l   符号付きlong値
    L   符号なしlong値
        (このshortは正確に32ビットです。ローカルのCコンパイラとは異なる
          かも知れません。同じにしたい場合は後ろに'!'を付けます)

    n   "network"の順(ビッグエディアン)の符号なしshort値
    N   "network"の順(ビッグエディアン)の符号なしlong値
    v   "VAX"順(リトルエディアン)の符号なしshort値
    V   "VAX"順(リトルエディアン)の符号なしlong値
        (これらのshortとlongは正確に16ビットと32ビットです)

    q   符号付きクワッド値(64ビット)
    Q   符号なしクワッド値
        (クワッドはシステムが64ビットintをサポートしていて、
          Perlのコンパイル時にサポートした時にのみ使用できます。
          それ以外では致命的エラーを発生させます)

    j   符号付きint値 (a Perl internal integer, IV).
    J   符号なしint値 (a Perl internal unsigned integer, UV).

    f   ネイティブフォーマットの単精度浮動小数点
    d   ネイティブフォーマットの倍精度浮動小数点

    F   ネイティブネイティブフォーマットの浮動小数点
           (a Perl internal floating point value, NV).
    D   ネイティブフォーマットのlong倍精度浮動小数点
        (long倍精度はシステムがlong倍精度値をサポートしていて、
          Perlのコンパイル時にサポートした時にのみ使用できます。
          それ以外では致命的エラーを発生させます)

    p   ヌルが終端文字の文字列へのポインタ
    P   構造体へのポインタ(固定長文字列)

    u   uuencodeされた文字列
    U   Unicodeの文字番号。UTF-8へエンコードします。
        (EBCDICプラットフォームではUTF-EBCDIC)

    w   BER圧縮された整数

    x   ヌルバイト
    X   1バイト後進
    @   絶対位置までヌルバイトを詰める
    (   ()グループの開始

詳細についてはマニュアルを参照してください。

package
SampleCode
package NAMESPACE
package
編集単位(編集中のソースコードや括弧内など)が与えられたネームスペースにあることを宣言します。パッケージ宣言の範囲は、その宣言がされている括弧で囲まれたブロック、ファイル、または eval の範囲などです(従って、"my"関数と同じです)。パッケージ宣言以降では、全ての宣言されていない識別子は、全てそのパッケージに含まれます。パッケージ宣言は、 my 宣言したレキシカル変数を除く、ダイナミック変数(local宣言をした変数を含む)に影響を与えます。

一般的に、パッケージ宣言は require use によって取り込まれるファイルの一番最初に記述されますが、ファイルやブロックの途中でパッケージを変更することもできます。その場合、宣言した場所以降の残りの部分に影響を与えます。他のパッケージの変数やファイルハンドルを利用する場合は、 $Package::Variable の様に、パッケージ名と2重のコロンを識別子の前に置くことで参照することができます。パッケージ名がない場合は"main"パッケージと見なされます。"main"パッケージは明示的に $::sail $main::sail とも記述できます。(古いコードでは" $main'sail "と書かれている場合もあります)。

もし NAMESPACE が省略された場合、カレントパッケージが存在しないか、全てのパッケージに適合するか、レキシカルであると見なされます。これは関数にも影響を与えるため、" use strict "よりも厳密です。

 パッケージ、モジュール、クラスの詳細については、 perlmod マニュアルを、スコープに関しては、 perlsub マニュアルを参照してください。

pipe
SampleCode
pipe READHANDLE,WRITEHANDLE
システムコールに一致するような一対のパイプをオープンします。パイプのプロセスをループするように設定した場合、デットロックが発生する事に注意すること。また、Perlは STDIO のバッファリングを使用する事にも注意が必要です。アプリケーションによっては、" $| "を WRITEHANDLE にセットし、コマンドの実行後にフラッシュが必要でしょう。 IPC::Open2 IPC::Open3 のマニュアルも参照してください。close-on-execフラグがサポートされているシステム上では、フラグは" $^F "から決定される新しく開かれたファイル記述子に設定されます。" $^F "については、 perlvar マニュアルの" $^F "セクションを参照してください。

pop
SampleCode
pop ARRAY
配列の最後の要素を返します。配列の長さは1短くなります。引数を省略した場合は、メインプログラム内では @ARGV が対象となり、サブルーチン内では @_ が対象となります。

pos
SampleCode
pos SCALAR
SCALAR に対して、前回の" m//g "が行われた場所を返します。

print
SampleCode
print FILEHANDLE LIST
print LIST
文字列、もしくは文字列のリストを出力し、成功すれば真を返します。 FILEHANDLE を省略した場合、標準出力に出力され、 LIST を省略した場合、 $_ が使用されます。

printf
SampleCode
printf (FILEHANDLE) FORMAT, LIST
" $\ "(出力レコードセパレータ)が追加されないと言う点を除けば、" print FILEHANDLE sprintf(FORMAT,LIST) "と等価です。 LIST の最初の要素は、 sprintf のフォーマットとして認識されます。" use locale "が設定されていた場合は、フォーマットされた文字列中の小数は LC_NUMERIC の影響を受けます。 perl-locale のマニュアルを参照してください。

単純な print で十分な場合に、 printf を使用するのは避けるべきでです。 print はより効率的で、ミスも起きにくいでしょう。

prototype
SampleCode
prototype FUNCTION
関数のプロトタイプを表す文字列を返します(プロトタイプを持たない場合、 undef を返します)。 FUNCTION は関数へのリファレンス、もしくは関数名です。

push
SampleCode
push ARRAY,LIST
ARRAY をスタックとして扱い、 ARRAY の最後に LIST を追加します。 ARRAY の長さは LIST の長さだけ増えます。戻り値として、追加したあとの配列の要素数を返します。
以下のコードとほぼ同等の動作をします。
    for $value (LIST) {
        $ARRAY[++$#ARRAY] = $value;
    }

quotemeta
SampleCode
quotemeta EXPR
EXPR 中の英数字でない文字にバックスラッシュを付加した文字列を返します(すなわち、"/[A-Za-z_0-9]/"以外の文字列にバックスラッシュを付けます)。これは、ダブルクオートで囲まれた文字列中で"\Q"エスケープを回避するための内部関数です。引数が省略された場合は $_ が使用されます。(変数を正規表現で使う場合、意図しない展開が行われないように使うこともあります)

rand
SampleCode
rand EXPR
0~ EXPR 未満の値を返します( EXPR は正の値でなければいけません)。 EXPR を省略した場合、1が使われます。 srand がまだ呼び出されていなければ、自動的に呼び出されます。

read
SampleCode
read FILEHANDLE,SCALAR,LENGTH(,OFFSET)
指定された FILEHANDLE から SCALAR にデータを LENGTH バイト読み込み、実際に読み込まれたバイト数を返します。0を返すとファイルの終端、 undef を返した場合はエラーの発生を表します。
SCALAR は実際に読み込まれた長さに伸び縮みします。 OFFSET を指定すると、 SCALAR OFFSET 以降に読み込んだデータがセットされます。

この関数は stdio fread を呼び出すことで実装されています。システムコールの read を呼び出したい場合は、 sysread を使用してください。

readdir
SampleCode
readdir DIRHANDLE
opendir によって開かれたディレクトリの次のエントリーを返します。もし、リストコンテキストで使用した場合、ディレクトリの残りのエントリーを全て返します。次のエントリーがない場合には、スカラコンテキストの場合は未定義値を、リストコンテキストの場合はnullを返します。
 もし、 readdir の戻り値を"ファイルテスト"するのであれば、ディレクトリのパスを戻り値の前に付加するか、 chdir でディレクトリを変更する方がよいでしょう。そうしなければ、間違ったファイルをテストする可能性があります。(globの返す値とは異なるので、注意が必要です)

readline
SampleCode
readline EXPR
EXPR に含まれる型グロブのファイルハンドルから読み込みを行います。

スカラコンテキストでは、ファイルの終端に達するまで次の行を返し、達した場合には未定義を返します。リストコンテキストで呼び出した場合、ファイルの終端までの各行をリスト値として返します。ここで言う行の区切りは" $/ "( $INPUT_RECORD_SEPARATOR )で指定された値となります。" $/ "については、 perlvar マニュアルを参照してください。もし、" $/ "に undef がセットされ、スカラコンテキストで呼び出された場合、始めに空文字列を返し、次に undef を返します。

この関数は"<EXPR>"を内部実装したものですが、ディレクトリに対しても使用できます。"<EXPR>"の詳細に関しては perlop マニュアルのI/0演算子を参照してください。(globに比べ、"<EXPR>"の記述方法は一般的なので、あえてこの関数を使う必要はないかも知れません)

readlink
SampleCode
readlink EXPR
シンボリックリンクが実装されていれば、シンボリックリンクの値を返します。実装されていなければ、致命的なエラーを返します。他のシステムエラーの場合、未定義値を返し、" $! "にエラー内容をセットします。引数が省略された場合は $_ が使用されます。

readpipe
SampleCode
readpipe EXPR
EXPR はシステムコマンドとして実行され、標準出力に出力された値を返します。スカラコンテキストで実行すると、(複数行を含む可能性もある)単一文字列として返し、リストコンテキストで実行すると、" $/ "( $INPUT_RECORD_SEPARATOR )で指定した値を区切りとして、各行をリストの値として返します。

これは"qx/EXPR/"を内部実装した関数ですが、ディレクトリに対しても使用できます。"qx/EXPR/"の詳細に関しては perlop マニュアルのI/0演算子を参照してください。

recv
SampleCode
recv SOCKET,SCALAR,LENGTH,FLAGS
ソケットからメッセージを受け取ります。指定された SOCKET ファイルハンドルから、可変的な SCALAR LENGTH バイトを読み込みます。 SCALAR の長さは、実際に読み込まれたバイト数に伸び縮みします。この関数には、同名のシステムコマンドと同じフラグが指定できます。
SOCKET がサポートしているプロトコルであれば、送信元のアドレスを返し、サポートしていない場合は、空文字列を返します。また、エラーの場合は、 undef を返します。この関数は、実際にはシステムコールの recvfrom を呼び出しています。

UDPに関しては、 perlipc マニュアルの"Message Passing"の例を参照してください。

redo
SampleCode
redo LABEL
このコマンドは、条件文を再評価せずに繰り返しブロックを再実行します( continue ブロックが存在しても実行されません)。 LABEL が省略された場合、最も内側のループが再実行されます。通常、入力を出力しない場合などに使用されます。
# 簡単なPascalのコメント除去
# (警告:文字列の中に { や } が無い場合に有効)
LINE: while (<STDIN>) {
    while (s|({.*}.*){.*}|$1 |) {}
    s|{.*}| |;
    if (s|{.*| |) {
        $front = $_;
        while (<STDIN>) {
            if (/}/) {      # コメントの終わりか?
                s|^|$front\{|;
                redo LINE;
            }
        }
    }
    print;
}

redo は値を返すブロック( evalsubdo 、また、 exit の使われていない grepmap のブロック)の再実行には使用できません。

continue ブロックに関する説明や、 lastnext の項目も参照してください。

ref
SampleCode
ref EXPR
EXPRがリファレンスであれば、その値を返し、そうでなければ偽を返します。引数が省略された場合は $_ が使用されます。返される値はリファレンスタイプを表す文字列です。組込型のタイプは、" SCALAR "," ARRAY "," HASH ", CODE "," REF "," GLOB "," LVALUE "である。

rename
SampleCode
rename OLDNAME,NEWNAME
ファイル名を変更します。成功した場合、真を返し、失敗した場合はそれ以外を返します。

require
SampleCode
require EXPR
引数が省略された場合は $_ が使用されます。バージョンナンバーが指定された場合、それ以降のバージョンのPerlが必要なことを示します。"require v5.6.1;","require 5.6.1;","require 5.005_03;"の様な形で指定します。
ファイル名が指定された場合、そのファイルをそこに読み込んで実行することを示します。
モジュール名が指定された場合、 use で指定したときと似た動作をしますが、 require ではコンパイル時ではなく、実行時に処理されます。

reset
SampleCode
reset EXPR
一般的に、ループの最後の continue ブロックで変数をクリアしたり、" ?? "演算子をリセットして再度機能するようにするために使用されます。 EXPR は文字のリストとして評価されます(ハイフンを利用すると、範囲で指定可能)。 EXPR に含まれる文字から始まる配列や変数は全て初期状態に戻されます。引数を省略すると、一度だけマッチするマッチ演算子("?pattern?")をリセットして、再び使用可能にします。この関数はカレントパッケージのみに影響を与え、常に1を返します。

レキシカル変数( my で宣言した変数)には影響を与えませんが、レキシカル変数はもともと、そのスコープを抜けると自動で初期化されます。

return
SampleCode
return EXPR
サブルーチン、 eval 、" do FILE "から EXPR を戻り値として戻します。
EXPR は呼び出されたコンテキストにより、リスト、スカラーなどで評価されます。 EXPR が省略された場合、リストコンテキストの場合は空リスト、スカラーコンテキストの場合は undef 、無効なコンテキストの場合は何も返しません。(明確な return を呼び出さないサブルーチン、 eval 、" do FILE "は最後に評価した式の値を返すので注意が必要です)

reverse
SampleCode
reverse LIST
リストコンテキストにおいて、引数のリストを逆順に並び替えたリストを返します。スカラコンテキストにおいては、要素を全て連結し、文字単位で逆順に並び替えた文字列を返します。
この関数はハッシュを反転するのに便利ですが、注意も必要です。ハッシュに同じ値が複数ある場合、それらのキーのうち、一つのみが保持されます。また、この関数は新しいハッシュを作成する事になるため、DBMファイルのような大きいハッシュを処理する場合、かなりの時間がかかるかもしれません。

rewinddir
SampleCode
rewinddir DIRHANDLE
DIRHANDLE に対して、 readdir 関数でのの読み込み位置を、最初に設定します。

rindex
SampleCode
rindex STR,SUBSTR,[POSITION]
index と似ていますが、 STR の中から、最初ではなく、最後に SUBSTR が出現する場所を返します。存在しない場合は、-1を返します。 POSITION を指定した場合は、その位置から探し始めます。

rmdir
SampleCode
rmdir FILENAME
FILENAME のディレクトリが空であれば、削除します。成功すれば真を返し、失敗した場合は、偽を返して、" $! "をセットします。引数が省略された場合は $_ が使用されます。

s///
SampleCode
s/PATTERN/REPLACEMENT/(egimox)
文字列から PATTERN を検索し、 REPLACEMENT で置き換えます。" =~ "や" !~ "で対象文字列が指定されていない場合は" $_ "が対象となります。デリミタには空白以外の非英数文字が使用できます。より詳しい説明は正規表現のマニュアルを参照してください。なお、修飾子の意味は以下の通りです。
	e  REPLACEMENTを式として評価
	g  一致した物すべてを置換
	i  大文字、小文字の区別をしない
	m  文字列を複数行として扱う
	o  パターンを一度だけコンパイルする
	s  文字列を単一業として扱う
	x  拡張正規表現を使う

scalar
SampleCode
scalar EXPR
EXPR の値を、強制的にスカラーとして評価してその値を返します。
	@counts = ( scalar @a, scalar @b, scalar @c );

強制的にリストとして評価する関数は必要ないので存在しません。もし、リストで評価したいのであれば、"@{[ (何らかの式) ]}"の構文が利用できます。しかし、通常は"(何らかの式)"で十分です。
scalar は単項演算子であるため、括弧に入れられたリストを EXPR として与えた場合、 scalar はその全てを評価して、最後の値のみを返します。そのため、以下の文は共に等しい動作をします。
	print uc(scalar(&foo,$bar)),$baz;

	&foo;
	print(uc($bar),$baz);

seek
SampleCode
seek FILEHANDLE,POSITION,WHENCE

FILEHANDLE の現在位置を指定します。ちょうど stdio fseek の様なものです。
WHENCE の位置をベースに、 POSITION の値を使って新しい位置をセットします。 WHENCE が0の場合、最初から、1の場合、現在の位置から、2の場合、ファイルの終端からとなります(終端からの場合、 POSITION には負の値を指定します)。 Fcntl モジュールを利用することで、これらの値の代わりに、それぞれ SEEK_SET SEEK_CUR SEEK_END の定数を使用することもできます。 seek に成功した場合には1、失敗すると0を返します。

もし、 sysread syswrite における位置が必要な場合には seek は使用できません(バッファリングの影響で双方の位置は一致しません)。その際は、 sysseek を利用してください。

ANSI Cにどの程度厳密に準拠しているかによって、システム間で読み書きの仕様が異なる場合もあります。他に stdio clearerr を呼び出す場合にも影響するかも知れません。 WHENCE に1( SEEK_CUR )を使用することで、ファイル位置を固定することが出来ます。

"EOF"まで読み込んだ後、 sleep した場合には、 seek を呼び出すのが望ましいでしょう。 seek は位置を変化させませんが、ファイルの終端に達したという状態をクリアします。そうすれば、あなたが望むならPerlはもう一度ファイルハンドルから読み込もうとします。

もし seek が機能しない場合(若干のシステムの stdio は特にひねくれています)、次のようなコードで代用も出来ます。
for (;;) {
	for ($curpos = tell(FILE); $_ = <FILE>;
		$curpos = tell(FILE)) {
		# search for some stuff and put it into files
	}
	sleep($for_a_while);
	seek(FILE, $curpos, 0);
}

seekdir
SampleCode
seekdir DIRHANDLE,POS
readdir における、 DIRHANDLE の位置を指定します。 POS telldir が返す値でなければいけません。ディレクトリ圧縮に関して、システムライブラリルーチンと同様の注意が必要です。

select
SampleCode
select FILEHANDLE
引数が指定されない場合、現在選択されているカレントのファイルハンドルを返します。 FILEHANDLE が指定された場合は、それをカレントのファイルハンドルとして指定します。これには二つの効果があります。一つは writeprint を使用する際、ファイルハンドルを指定することなく FILEHANDLE に書き込めること、もう一つは出力に関連する変数への出力はこのファイルハンドルに対して機能することです。たとえば、以下のような場合です。
     select(REPORT1);
     $^ = 'report1_top';
     select(REPORT2);
     $^ = 'report2_top';

FILEHANDLE の値は、実際のファイルハンドルの名前の場合もあります。
     $oldfh = select(STDERR); $| = 1; select($oldfh);

人によってはファイルハンドルをオブジェクトとして扱い、以下のように書くこともあります。
    use IO::Handle;
    STDERR->autoflush(1);

select
SampleCode
select RBITS,WBITS,EBITS,TIMEOUT
ビットマスクと共にシステムコールの select(2) を呼び出します。ビットマスクは fileno vec を使って作ります。
     $rin = $win = $ein = '';
     vec($rin,fileno(STDIN),1) = 1;
     vec($win,fileno(STDOUT),1) = 1;
     $ein = $rin | $win;

複数のファイルハンドルから選択したい場合はサブルーチンを書きます。
    sub fhbits {
        my(@fhlist) = split(' ',$_[0]);
        my($bits);
        for (@fhlist) {
            vec($bits,fileno($_),1) = 1;
        }
        $bits;
    }
    $rin = fhbits('STDIN TTY SOCK');

以下のように使用します。
    ($nfound,$timeleft) = select($rout=$rin, $wout=$win, $eout=$ein, $timeout);

    $nfound = select($rout=$rin, $wout=$win, $eout=$ein, undef);

ビットマスクの値のいずれも undef にすることが出来ます。多くのシステムでは、利用可能な値を $timeleft に返さないので、スカラコンテキストで呼び出した場合には $nfound にだけ値を返します。有効な $timeleft を返さないシステムの場合、与えられた $timeout と同じ値を $timeleft に返します。

250ミリ秒スリープしたい場合には以下のように記述できます。
    select(undef, undef, undef, 0.25);

send
SampleCode
send SOCKET,MSG,FLAGS,TO
send SOCKET,MSG,FLAGS
ソケットにメッセージを送信します。同名のシステムコールと同じフラグを指定できます。接続されていないソケットの場合、Cの sendto の様に、送信先を TO に指定する必要があります。
送信に成功した場合は、送信した文字数、エラーの場合には未定義値を返します。Cの"sendmsg(2)"は現在実装されていません。

UDPに関しては、 perlipc マニュアルの"Message Passing"の例を参照してください。

setpgrp
SampleCode
setpgrp PID,PGRP
PID で指定されたプロセス("0"の場合は現在のプロセス)のプロセスグループを PGRP にする。POSIXの setpgid(2) 、BSDの setpgrp(2) を実装していないシステムの場合、致命的なエラーになります。引数が省略された場合、"0,0"が指定されたものと見なされます。

注意:BSD 4.2では setpgrp は使用できませんので、 setpgrp(0,0) で指定してください。また、 POSIX::setsid() も参照してください。

setpriority
SampleCode
setpriority WHICH,WHO,PRIORITY
グループプロセスもしくはユーザープロセスのカレントプライオリティを設定します( setpriority(2) も参照してください) 。 setpriority(2) を実装していないシステムで実行すると、致命的なエラーを返します。

setsockopt
SampleCode
setsockopt SOCKET,LEVEL,OPTNAME,OPTVAL
ソケットのオプションを指定された値に設定します。エラーが発生した場合、未定義値を返します引数を渡さない場合には OPTVAL undef を指定します。

shift
SampleCode
shift ARRAY
配列の最初の値を取り出して返し、その結果、配列は1つ短くなります。配列に要素がない場合は undef を返します。引数が省略された場合、サブルーチンやフォーマット内では @_ 、それ以外では @ARGV が使用されます。 unshift , push , pop も参照してください。

shutdown
SampleCode
shutdown SOCKET,HOW
HOW で指定された方法でソケットを閉じます。この方法は同名のシステムコールと同じように解釈されます。
	shutdown(SOCKET, 0);    # データの読み込みを中止
	shutdown(SOCKET, 1);    # データの書き込みを中止
	shutdown(SOCKET, 2);    # このソケットの使用を中止

これは、データの書き込みはしたいが、読み込みはしたくない場合などに便利です。また、他のプロセスでの読み書きにも影響を与えます。

sin
SampleCode
sin EXPR
引数のサインの値を返します。引数が省略された場合は、 $_ が使用されます。サインの逆関数が必要な場合は、 Math::Trig::asin 関数を利用するか、以下の公式を使用することで求められます。
	sub asin { atan2($_[0], sqrt(1  $_[0] * $_[0])) }

sleep
SampleCode
sleep EXPR
EXPR 秒だけ(省略された場合は永遠に)スクリプトの実行を止めます。 SIGALRM のようなシグナルで割り込みをかけられます。戻り値として、実際に止まっていた秒数を返します。多くの場合、 sleep alarm を使って実装されているので、この二つを混ぜて使用することは出来ません。

古いシステムでは、実際に指定した秒数より1秒程度少なくなる場合もあります。これは、システムのカウント方法に依存します。最近のシステムでは多くの場合問題ありません。しかし、マルチタスク・システムではあなたのプロセスがすぐに実行されるとは限らないため、実際に指定した値よりも長くスリープしているように見えるかも知れません。

もし、1秒以下の遅れを気にするのであれば、 syscall を利用して setitimer(2) を呼び出してください(あなたのシステムが setitimer(2) をサポートしている必要があります)。また、CPANの Time::HiRes モジュールが助けになるかも知れません。

POSIX モジュールの sigpause も参照してください。

socket
SampleCode
socket SOCKET,DOMAIN,TYPE,PROTOCOL
ソケットを開き、ファイルハンドル SOCKET に結びつけます。 DOMAIN TYPE PROTOCOL は同名のシステムコールと同じ物を指定します。適切にインポートするためには、最初に use Socket を使用しなければいけません。サンプルはperlipcマニュアルの"Sockets: Client/Server Communication"の部分を参照してください。

close-on-execフラグがサポートされているシステム上では、フラグは" $^F "から決定される新しく開かれたファイル記述子に設定されます。" $^F "については、 perlvar マニュアルの" $^F "セクションを参照してください。

socketpair
SampleCode
socketpair SOCKET1,SOCKET2,DOMAIN,TYPE,PROTOCOL
指定したドメインの名前のないソケットペアを指定したタイプで作成します。 DOMAIN TYPE PROTOCOL は同名のシステムコールと同じ物を指定します。実装されていない場合は致命的エラーを返します。成功の場合は、真を返します。

close-on-execフラグがサポートされているシステム上では、フラグは" $^F "から決定される新しく開かれたファイル記述子に設定されます。" $^F "については、 perlvar マニュアルの" $^F "セクションを参照してください。

いくつかのシステムでは、 socketpair を呼ぶ際に、" pipe(Rdr, Wtr) "の形で、 pipe を使用します。
    use Socket;
    socketpair(Rdr, Wtr, AF_UNIX, SOCK_STREAM, PF_UNSPEC);
    shutdown(Rdr, 1);        # no more writing for reader
    shutdown(Wtr, 0);        # no more reading for writer

socketpair のサンプルに関しては manpage のマニュアルを参照してください。

sort
SampleCode
sort SUBNAME LIST
sort BLOCK LIST
sort LIST
LIST をソートして、その結果をリスト値として返します。
SUBNAME (サブルーチンの名前)、または BLOCK が省略さた場合、標準の文字列比較順でソートされます。
SUBNAME BLOCK を指定する場合、それは、0未満、0、0より大きいのいずれかを返す必要があり、リストはそれによってソートされます("<=>" や "cmp" 演算子はそのような比較に役に立ちます)。 SUBNAME はスカラ変数で与える事もできます。

もし、サブルーチンのプロトタイプが ($$) であった場合、通常のサブルーチンでは @_ のリファレンスで渡されます。これは、プロトタイプ宣言されていないサブルーチンより遅いため、普通、比較される要素はパッケージのグローバル変数の $a $b としてサブルーチンに渡されます(サンプルコードを参照してください)。 $a $b をレキシカル変数とするのは、通常逆効果になります。

また、サブルーチンが再帰的でない場合もあります。比較される値は常にリファレンスで渡されるため、値を変更してはいけません。サブルーチンやブロック内から goto などで出てはいけません。

use locale を使用している場合、ソートにも影響を与えます。マニュアルの perllocale を参照してください。

use strict を使用している場合、 $a $b はグローバル変数として使用されるため、レキシカル変数として使用してはいけません。これは、("main"パッケージ内であれば)以下のような意味です。
	@articles = sort {$main::b <=> $main::a} @files;

また、以下も同じ意味です。
	@articles = sort {$::b <=> $::a} @files;

"FooPack"パッケージ内であれば、以下のようになります。
	@articles = sort {$FooPack::b <=> $FooPack::a} @files;

比較機能は以上のように振る舞うことを要求され、矛盾した動作をする場合、正常にソートできません(ある時は $x[1] $x[2] より小さいという値を返し、またある時はその逆を返すような)。

splice
SampleCode
splice ARRAY,OFFSET,LENGTH,LIST
splice ARRAY,OFFSET,LENGTH
splice ARRAY,OFFSET
splice ARRAY
ARRAY OFFSET 位置から LENGTH だけ値を除去し、 LIST が指定されていれば、その値に置き換えます。リストコンテキストで呼び出されていれば、除去した値を返します。スカラコンテキストの場合は、最後に除去した値、除去しなかった場合は undef を返します。必要に応じて、配列の長さは伸び縮みします。 OFFSET が負の数の場合、配列の後ろから数えます。 LENGTH が省略された場合、 OFFSET 以降全てが除去されます。 LENGTH が負の数の場合、配列の後ろから除去します。 OFFSET LENGTH のいずれも省略された場合、全ての値が除去されます。

$[ == 0 (配列の最初の要素のインデックス)であれば、以下の式は左右が同等です。
    push(@a,$x,$y)      splice(@a,@a,0,$x,$y)
    pop(@a)             splice(@a,1)
    shift(@a)           splice(@a,0,1)
    unshift(@a,$x,$y)   splice(@a,0,0,$x,$y)
    $a[$x] = $y         splice(@a,$x,1,$y)

以下のコードは配列の比較を行っています。 LENGTH ARRAY よりも先に処理されるため、以下のコードは正しく機能します。
    sub aeq {   # compare two list values
        my(@a) = splice(@_,0,shift);
        my(@b) = splice(@_,0,shift);
        return 0 unless @a == @b;       # same len?
        while (@a) {
            return 0 if pop(@a) ne pop(@b);
        }
        return 1;
    }
    if (&aeq($len,@foo[1..$len],0+@bar,@bar)) { ... }

split
SampleCode
split /PATTERN/,EXPR,LIMIT
split /PATTERN/,EXPR
split /PATTERN/
PATTERN をデリミタとして、文字列を分割し、リストとして返します。デフォルトでは、文字列先頭の空白は保持されますが、末尾の空白は削除されます。 EXPR が省略された場合は $_ が使用されます。 PATTERN も省略された場合、空白をデリミタとして使用します。 PATTERN は正規表現で記述され、マッチするもの全てがデリミタとなります(1文字以上であってもかまいません)。

リストコンテキストで呼び出されなかった場合、リストの数を返し、リストの値は @_ に入ります。しかし、 @_ はサブルーチンの引数として利用されているため、明示的でない @_ への代入は推奨されません。

LIMIT を指定した場合、文字列の分割をその値までに制限します(リストの最後の値に、残りの文字列全てが入ります)。指定されなかった場合、もしくは0を指定した場合、末尾の空フィールドは削除されます( pop を使用する場合は注意してください)。負の値が指定された場合は、(分割可能な数よりも)大きな値が指定されたかのように扱われます。

デリミタとして空文字列が指定された場合、文字列は以下の例のように、各文字ごとに分割されます("//"とは異なります。この場合、空白も1文字ずつ分割されます)。
    print join(':', split(/ */, 'hi there'));
    # 出力: h:i:t:h:e:r:e

PATTERN が括弧"()"を含む場合、リストの要素にはデリミタ自身も含まれます。
    print join ':', split(/([,])/, "110,20", 3);
    # 出力: 110:,:20

sprintf
SampleCode
sprintf FORMAT, LIST
C言語の sprintf と同じ書式で、 printf と同じようにフォーマットされた文字列を返します。あなたのシステムの sprintf(3) printf(3) のマニュアルも参照してください。
例:
    # 先頭に0を付加して、8桁揃えにした数字
    $result = sprintf("%08d", $number);

    # 小数点以下3桁の表示
    $rounded = sprintf("%.3f", $number);

Perlは sprintf のフォーマットを独自に行い、C言語の sprintf を使用しません。そのため、ローカルの sprintf が拡張されていたとしても、Perlの sprintf に影響を与えません。

printf と異なり、 sprintf は引数として渡す配列の最初の要素をフォーマットとして渡そうとした場合、恐らくあなたの意図する動作をしません。配列はスカラコンテキストとして与えられ、配列の要素数をフォーマットとして渡すため、それは意味のある動作にはならないでしょう。

Perlの sprintf は次の一般的なフォーマットをサポートします。
   %%   パーセント記号
   %c   文字
   %s   文字列
   %d   10進数
   %u   符号無し10進数
   %o   符号無し8進数
   %x   符号無し16進数
   %e   浮動小数点(指数形式)
   %f   浮動小数点(固定小数点形式)
   %g   浮動小数点(%e もしくは %f の形式)

また、次のフォーマットも追加でサポートします。
   %X   %x と同じですが、大文字を使用します
   %E   %e と同じですが、大文字の"E"を使用します
   %G   %g と同じですが、大文字の"E"を使用します
   %b   an unsigned integer, in binary
   %p   ポインタ(値が置かれているアドレスを16進数で)
   %n   特殊:パラメータリストの次の変数に、出力した文字数を入れる

その他に、後方互換性として、次のフォーマットもサポートします。
   %i   %d と同じです
   %D   %ld と同じです
   %U   %lu と同じです
   %O   %lo と同じです
   %F   %f と同じです

"%"と変換コード("c"や"s"などの文字)の間に以下のような値を記述することで、より細かい制御が行えます。

【フォーマットパラメータインデックス】
フォーマットを適用するリスト要素のインデックスを明示的に指定できます("2$"の様に指定します)。デフォルトでは、次のまだフォーマットしていないリスト要素を使用します。
    printf '%2$d %1$d', 12, 34;      # prints "34 12"
    printf '%3$d %d %1$d', 1, 2, 3;  # prints "3 1 1"

【フラグ】
数字の前に付加する文字を指定します。
    printf '<% d>', 12;   # 出力 "< 12>"
    printf '<%+d>', 12;   # 出力 "<+12>"
    printf '<%6s>', 12;   # 出力 "<    12>" 数字で桁を指定
    printf '<%-6s>', 12;  # 出力 "<12    >" マイナスを付けると右揃え
    printf '<%06s>', 12;  # 出力 "<000012>" ゼロを付けると0で桁揃え
    printf '<%#x>', 12;   # 出力 "<0xc>"   16進数"0x"、8進数"0"を付加

【ベクターフラグ】
分割された数値のベクタを文字列として結合します。
    printf "version is v%vd\n", $^V;     # Perl's version

"*"を"v"の前に置くと、分割に使用されている文字列を上書きします。
    printf "address is %*vX\n", ":", $addr;   # IPv6アドレス
    printf "bits are %0*v8b\n", " ", $bits;   # ランダムビットストリング

また、インデックスを指定することで("*2$v"のように)、結合に使用する文字を指定することもできます。
    printf '%*4$vX %*4$vX %*4$vX', @addr[1..3], ":";   # IPv6アドレスを":"で区切る

【最低桁数】
出力する桁数(幅数)を指定します。マイナスが指定された場合は、左揃えになります。
     printf '<%s>', "a";       # 出力 "<a>"
     printf '<%6s>', "a";      # 出力 "<     a>"
     printf '<%*s>', 6, "a";   # 出力 "<     a>"
     printf '<%*2$s>', "a", 6; # 出力 "<     a>"
     printf '<%2s>', "long";   # 出力 "<long>" (変換されない)

【最大桁数】
ドットを付けて数字を指定することで最大桁数を指定できます。(".*2$x"の様な)インデックスによる指定は現在機能しません(将来、実装予定です)。
     printf '<%f>', 1;               # 出力 "<1.000000>"
     printf '<%.1f>', 1;             # 出力 "<1.0>"
     printf '<%.0f>', 1;             # 出力 "<1>"
     printf '<%e>', 10;              # 出力 "<1.000000e+01>"
     printf '<%.1e>', 10;            # 出力 "<1.0e+01>"

     printf '<%.6x>', 1;             # 出力 "<000001>"
     printf '<%#.6x>', 1;            # 出力 "<0x000001>"
     printf '<%-10.6x>', 1;          # 出力 "<000001    >"

     printf '<%.5s>', "truncated";   # 出力 "<trunc>"
     printf '<%10.5s>', "truncated"; # 出力 "<     trunc>"

     printf '<%.6x>', 1;             # 出力 "<000001>"
     printf '<%.*x>', 6, 1;          # 出力 "<000001>"

sqrt
SampleCode
sqrt EXPR
EXPR の平方根を返します。引数が省略された場合は $_ が使用されます。 Math::Complex モジュールをロードしていなければ、正の値にのみ使用できます。
	use Math::Complex;
	print sqrt(2);    # 出力:1.4142135623731i

srand
SampleCode
srand EXPR
rand の乱数の種を設定します。 EXPR が省略された場合、(/dev/urandom deviceをサポートしていれば)カーネルの提供する疑似乱数の値か、プロセスIDと現在の時刻などから得られる値を使用します。5.004より以前のバージョンのPerlでは、現在の時刻がデフォルトの種でしたが、これは良い値とは言えません。そのため、多くの古いプログラムでは独自に種を与えていましたが、もう必要ありません。("time ^ $$" や "time ^ ($$ + ($$ << 15))"などがよく使われました)。

実際の所、 srand の呼び出しは必須ではありません。なぜなら、 rand を呼び出した時点で、 srand が未だ呼ばれていなければ自動的に呼び出されるからです。しかし、5.004より以前のバージョンのPerlで実行する可能性があるのなら、呼び出しておく方が望ましいでしょう。

暗号化などの目的にはよりランダムな種を必要とします。この場合、圧縮ファイルのチェックサムや頻繁に変わるOSのステータスを利用するのが一般的です。
                   srand (time ^ $$ ^ unpack "%L*", `ps axww | gzip`);

もし、これについて特に興味があるなら、CPANの Math::TrulyRandom を参照してください。

あなたが srand についてよく知っていて、また、特に必要でない限り、同じプログラム中で何度も呼ぶべきではありません。(ループ内などで、短時間の内に srand rand を繰り返しセットで呼び出したりすると、同じ乱数が生成されてしまうので、要注意です)

stat
SampleCode
stat FILEHANDLE
stat EXPR
ファイルパス、もしくはファイルハンドルから13個のステータスを取得します。引数が省略された場合は $_ が使用されます。失敗した場合はnullのリストを返します。リストの要素は以下の通りです。
	($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
		$atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);

	 0 ファイルシステムのデバイス番号
	 1 inodeの値
	 2 ファイルモード(タイプとパーミッション)
	 3 ファイルのハードリンクの値
	 4 ファイル所有者UIDの数値
	 5 ファイル所有者GIDの数値
	 6 デバイス識別子(特殊ファイル限定)
	 7 ファイルサイズ
	 8 最後アクセスタイム("epoch"からの経過時間(秒))
	 9 最終変更時間("epoch"からの経過時間(秒))
	10 inodeの変更時間(作成時間ではありません!)("epoch"からの経過時間(秒))
	11 ファイルシステムI/Oのブロックサイズ
	12 実際のブロックの場所の番号
	("epoch"は 00:00 January 1, 1970 GMT です)


stat に特殊なファイルハンドルであるアンダーライン("_")が渡された場合、 stat は機能しませんが、最後に stat を実行した時の値、もしくは最後にファイルテスト時の値が返されます。
if (x $file && (($d) = stat(_)) && $d < 0) {
		print "$file is executable NFS file\n";
}

モードはファイルタイプとパーミッションの両方を含んでいるため、パーミッションを求めたい場合には、 print (または sprintf )を使用して、ファイルタイプをマスクする必要があります。
    $mode = (stat($filename))[2];
    printf "Permissions are %04o\n", $mode & 07777;

スカラコンテキストで実行した場合、ブーリアン値で成功か失敗かを返します。成功の場合、
特殊なファイルハンドルである"_"に値をセットします。
    use File::stat;
    $sb = stat($filename);
    printf "File is %s, size is %s, perm %04o, mtime %s\n",
        $filename, $sb->size, $sb->mode & 07777,
        scalar localtime $sb->mtime;

なお、忘れがちですがファイルテスト演算子があるので、多くの場合はこの関数を使わなくても対応可能です。

study
SampleCode
study SCALAR
次に変更されるまでに何度もパターンマッチが行われる SCALAR (省略した場合には $_ が使用されます)をstudyしておきます。これは、パターンマッチの回数によって、速くなる場合も、遅くなる場合もあります。

短い固定文字列(より複雑な一定のパターンも含む)をスキャンする場合に、最も速くなります。 study は1度の実行のみ効果があり、別の SCALAR をstudyすると以前の内容は忘れてしまいます。

次の例は、文字列が特定のパターンを含んでいる場合には、インデックスを挿入するループです。
    while (<>) {
        study;
        print ".IX foo\n"       if /\bfoo\b/;
        print ".IX bar\n"       if /\bbar\b/;
        print ".IX blurfl\n"    if /\bblurfl\b/;
        # ...
        print;
    }

実行するまで判らない文字列をパターンマッチする場合、ループを単一文字列にし、 eval に渡すことで、何度もコンパイルされるのを避けることができます。さらに、 $/ (改行文字)を未定義にすることで、入力ファイルが一つのレコードになり、より高速になります。これは、専用プログラムの fgrep(1) よりもしばしば速くなります。以下のコードはファイルリスト( @files )単語群( @words )を検索し、単語が含まれるファイル名を出力します。
    $search = 'while (<>) { study;';
    foreach $word (@words) {
        $search .= "++\$seen{\$ARGV} if /\\b$word\\b/;\n";
    }
    $search .= "}";
    @ARGV = @files;
    undef $/;
    eval $search;               # this screams
    $/ = "\n";          # put back to normal input delimiter
    foreach $file (sort keys(%seen)) {
        print $file, "\n";
    }

sub
SampleCode
sub BLOCK
sub NAME
sub NAME BLOCK
これはサブルーチンを表すもので、厳密には関数とは言えません。 NAME (とプロトタイプ宣言)だけが指定された場合はサブルーチンの事前の宣言になります。 NAME を指定しなかった場合は、匿名の関数となり、コードブロックのリファレンスを返します。詳細は perlsub perlref のマニュアルを参照してください。

substr
SampleCode
substr EXPR,OFFSET(,LENGTH,REPLACEMENT)
EXPR の部分文字列を返します。オフセットは最初の文字が0になります( $[ が変更されていない場合。 $[ の変更は推奨されていません)。 OFFSET が負の数の場合、文字列の後ろから数えます。 LENGTH が負の数の場合は、出力される文字列が後ろから指定した文字数だけ削られて出力されます。

substr は左辺値としても使用できます。この時、置き換える文字列が LENGTH よりも短い場合、文字列は短くなり、長い場合は長くなります。文字列の長さを保持したい場合は sprintf などを使用してください。第4引数として REPLACEMENT を指定して置き換えを行うこともできます。この場合、返される値は置き換えの対象となった部分の(書き換えられる前の)文字列です。

OFFSET LENGTH が文字列の範囲を超えている場合には、範囲内の部分のみが返されます。全く範囲内にない場合には未定義値を返し、警告します。左辺値として使用する場合に範囲外を指定した場合、致命的エラーとなります。
    my $name = 'fred';
    substr($name, 4) = 'dy';            # $name is now 'freddy'
    my $null = substr $name, 6, 2;      # returns '' (no warning)
    my $oops = substr $name, 7;         # returns undef, with warning
    substr($name, 7) = 'gap';           # fatal error

symlink
SampleCode
symlink OLDFILE,NEWFILE
OLDFILE へのシンボリックリンク NEWFILE を作成し、成功すれば1、それ以外だと0を返します。シンボリックリンクがサポートされていないシステムでは、実行時に致命的エラーが発生します。これを避けるために eval が利用できます。
    $symlink_exists = eval { symlink("",""); 1 };

syscall
SampleCode
syscall LIST
リストの最初の値に入っているシステムコールを呼び出し、それ以降のリスト値を引数としてシステムコールに渡します。実装されていない場合は、致命的なエラーを返します。引数が数値の場合、 int として見なされ、それ以外であれば、文字列の値へのポインタとして見なしてシステムコールに渡されます。文字列を受け取る場合、受け取る結果が入るだけの十分な長さが必要です。Perlはどのような文字列の値へのポインタであっても書き込みがあると仮定しないといけないため、文字列リテラル(他の読み取り専用文字列)を引数として syscall を呼び出すことはできません。整数値(integer)の引数がリテラルでない、または数値コンテキストで解釈さていれない場合、0を加算することでPerlに数値と認識させることができます。以下は syswrite (もしくはその反対の動作)をエミュレートしています。
	require 'syscall.ph';               # may need to run h2ph
	$s = "hi there\n";
	syscall(&SYS_write, fileno(STDOUT), $s, length $s);

Perlは14個までの引数をサポートしているため、通常の使用では必要十分と思われます。

システムコールがどのような値を返したとしても、 syscall は値を返します。もし、システムコールの呼び出しに失敗した場合、-1を返し、 $! にエラー内容をセットします。
多くのシステムコールではきちんと-1を返します。適切に扱うためには、呼び出しの前に"$!=0;"をチェックし、 syscall が-1を返した場合には $! をチェックする方法が良いでしょう。

syscall(&SYS_pipe) に関しては問題があり、作成された pipe のリード端のファイルナンバーを返します。逆側の端を取り出す方法はありませんので、代わりに pipe を使用してください。

sysopen
SampleCode
sysopen FILEHANDLE,FILENAME,MODE
sysopen FILEHANDLE,FILENAME,MODE,PERMS
FILENAME で与えられるファイルを開き、 FILEHANDLE に関連付けます。 FILEHANDLE は実際のファイルハンドル名の場合もあります。この関数はOSの open 関数を FILENAME MODE PERMS を引数として呼び出しています。

MODE で利用可能なフラグビットはシステム依存で、標準モジュールの Fcntl が利用されます。利用可能なフラグビットはOSのマニュアルを参照してください。最も一般的な値は、読み込み専用の O_RDONLY 、書き込み専用の O_WRONLY 、読み書き可能な O_RDWR があります。フラグビットは" | "演算子によって結合できます。

また、歴史的な理由により、ほとんどのシステムでサポートされる値に、0の読み込み専用、1の書き込み専用、2の読み書き可能のフラグがあります。しかし、OS/390、VM/ESA Unix、Macintoshでは機能しないため、現在のコードで使用することは推奨されません。

FILENAME が存在しない場合、 O_CREAT フラグで新しいファイルが作成されます。 PERMS は新しく作成されたファイルのパーミッションとなります。省略された場合には、"0666"になります(現在の umask の影響を受けます)。

多くのシステムで O_EXCL フラグは独占的なモードでファイルを開きます。ファイルのロックは行いませんが、独占的なモードで開いている場合、そのファイルを sysopen() で開こうとすると失敗します。 O_EXCL O_TRUNC よりも強力です。 O_TRUNC は既存のファイルの先頭部分を切り取る場合に使用します。

umask によるパーミッション設定の柔軟性を取り去るため、パーミッションに"0644"を指定するのは推奨されません。省略する方がより望ましいでしょう。

sysread
SampleCode
sysread FILEHANDLE,SCALAR,LENGTH,OFFSET
sysread FILEHANDLE,SCALAR,LENGTH

システムコールの read(2) を利用し、指定された FILEHANDLE から、 LENGTH バイト分、 SCALAR に読み込みを行い、戻り値として読み込んだバイト数を返します。0の場合はファイルの終端を表し、 undef はエラーの発生を表します。 SCALAR の長さは、実際に読み込んだバイト数によって伸び縮みします。

このコマンドはデータを stdio へバイパスしますが、バッファしないため、 print write seek tell eof などと一緒に使用すると、混乱することがあります。

OFFSET を指定することで、文字列中の指定された位置以降にデータを読み込みます。負の値を指定した場合、文字列の終わりからカウントされます。また、正の値で、 OFFSET SCALAR よりも長い場合は、その長さになるまで" \0 "を追加して文字列を伸ばしてから書き込みを行います。

syseof() eof() 関数はありませんので、 sysread() を使用してその戻り値をチェックすることで代用してください。

sysseek
SampleCode
sysseek FILEHANDLE,POSITION,WHENCE
lseek(2) で使われるシステム位置を FILEHANDLE に対して設定します。これは stdio へバイパスしますので、混乱を避けるため、 sysread print write seek tell eof などと混在して使用しないでください。 FILEHANDLE は実際のファイルハンドル名の場合もあります。

WHENCE の位置をベースとして、 POSITION を元に新しい位置をセットします。 WHENCE が0の場合、最初から、1の場合、現在の位置から、2の場合、ファイルの終端からとなります(終端からの場合、 POSITION に負の値を指定します)。 Fcntl モジュールを利用することで、これらの値の代わりに、それぞれ SEEK_SET SEEK_CUR SEEK_END を使用することもできます。

戻り値として、現在の位置を返します。失敗した場合には undef です。失敗の際に返る undef と0は異なりますので注意が必要です(0が戻っても失敗ではありません)。

system
SampleCode
system LIST
system PROGRAM LIST
この関数は、最初に fork することと、親プロセスが子プロセスの完了を待つこと以外は exec LIST と同じです。

PROGRAM が与えられた場合は、 LIST を引数として、与えられなかった場合は LIST の最初の値を PROGRAM と見なして残りの値を引数として、 PROGRAM に渡します。

引数が1つのスカラだけの場合、最初にシェルのメタキャラクタがチェックされ、存在する場合には分割されてシステムのコマンドシェルに渡されます(Unixでは" /bin/sh -c "ですが、システムごとに異なります)。メタキャラクタが存在しない場合、単語単位に分割されて、直接 execvp に渡されます。

v5.6.0から、Perlはフォークする前に、開いている全てのファイルのバッファをフラッシュしようとしますが、いくつかのプラットフォームではサポートされていないかもしれません( perlport のマニュアルを参照してください)。より確実に行うのであれば、 $| $AUTOFLUSH )をセットするか、開いているハンドルに対して IO::Handle autoflush() メソッドを呼び出してください。(Perlのスクリプトと呼び出すプログラムとで同じファイルを操作しようとするのであれば、このバッファリングが関係しますので注意が必要です)

戻り値は wait の返す終了ステータスです。実際の終了コードを得るためには、値を256で割ってください( exec も参照してください)。-1の戻り値は、プログラムの開始に失敗したことを示します(失敗の理由は $! に入ります)。実行したコマンドの戻り値を利用したい場合には、backticks("`")や qx// が利用できます。詳細は perlop マニュアルの"STRING"の項目を参照してください。

system PROGRAM LIST の構文で使う場合、 exec と同じように使用できます。

system でプログラムを実行している間は、 SIGINT SIGQUIT の割り込みを無視しますので、これらの割り込みを処理する場合は、以下のようなコードを自前で実装する必要があります。
    @args = ("command", "arg1", "arg2");
    system(@args) == 0 or die "system @args failed: $?"

" $? "にステータスが入りますので、失敗したかどうかを調べることができます。
    $exit_value  = $? >> 8;
    $signal_num  = $? & 127;
    $dumped_core = $? & 128;

結果とリターンコードはシステムシェルによって異なりますので、詳細は perlop マニュアルの STRING セクションを参照してください。

syswrite
SampleCode
syswrite FILEHANDLE,SCALAR,LENGTH,OFFSET
syswrite FILEHANDLE,SCALAR,LENGTH
syswrite FILEHANDLE,SCALAR
システムコールの write(2) を使用して、 SCALAR から FILEHANDLE に対して、 LENGTH バイト書き込みます。 LENGTH を指定しないと、 SCALAR 全体を書き込みます。 OFFSET を指定し、実際のデータが LENGTH バイトに満たない場合も、書き込めるだけを書き込みます。戻り値は実際に書き込んだバイト数になりますが、エラーが発生すると undef を返します。

OFFSET は書き出しを開始する SCALAR の位置を指定します。負の値を指定すると、文字列の後ろから数えます。 SCALAR が空の場合、 OFFSET に使用できるのは、0のみとなります。

このコマンドはデータを stdio へバイパスしますが、バッファリングしないため、 print write seek tell eof などと一緒に使用すると、混乱することがあります。

tell
SampleCode
tell FILEHANDLE
FILEHANDLE の現在の位置を返します。 FILEHANDLE は実際のファイルハンドル名の場合もあります。ファイルハンドルが省略された場合、最後に読み込んだファイルのファイルハンドルと見なされます。

systell の機能はありませんので、代わりに sysseek(FH,0, 1) を使用してください。

telldir
SampleCode
telldir DIRHANDLE
readdir で使用される DIRHANDLE の現在の位置を返します。戻り値は seekdir で特定のディレクトリにアクセスするためなどに使用されます。ディレクトリ圧縮に関して、システムライブラリルーチンと同様の注意が必要です。

tie
SampleCode
tie VARIABLE,CLASSNAME,LIST
この関数は、パッケージのクラスをそのクラスが実装している方法でバインドします。
VARIABLE はバインドされる対象の名前、 CLASSNAME はバインドするクラスの実装している正しい型の名前で、それ以降の引数は、クラスの new メソッド( TIESCALAR TIEHANDLE TIEARRAY TIEHASH )に渡されます。一般的に、これらの引数は、多くの場合にC言語の dbm_open() 関数に渡されます。 tie 関数は new メソッドの返す値を返し、この値は CLASSNAME の別のメソッドにアクセスするために利用できます。

keysvalues などの関数は、DBMファイルの様な大きなオブジェクトに使用した場合、多くの場合に巨大なリストを返します。そのため、代わりに each 関数を利用するほうが望ましいでしょう。
    # print out history file offsets
    use NDBM_File;
    tie(%HIST, 'NDBM_File', '/usr/lib/news/history', 1, 0);
    while (($key,$val) = each %HIST) {
        print $key, ' = ', unpack('L',$val), "\n";
    }
    untie(%HIST);

ハッシュを実装するクラスは、以下のメソッドを提供しなければいけません。
    TIEHASH classname, LIST
    FETCH this, key
    STORE this, key, value
    DELETE this, key
    CLEAR this
    EXISTS this, key
    FIRSTKEY this
    NEXTKEY this, lastkey
    DESTROY this

通常の配列を実装するクラスは、以下のメソッドを提供しなければいけません。
    TIEARRAY classname, LIST
    FETCH this, key
    STORE this, key, value
    FETCHSIZE this
    STORESIZE this, count
    CLEAR this
    PUSH this, LIST
    POP this
    SHIFT this
    UNSHIFT this, LIST
    SPLICE this, offset, length, LIST
    EXTEND this, count
    DESTROY this

ファイルハンドルを実装するクラスは、以下のメソッドを提供しなければいけません。
    TIEHANDLE classname, LIST
    READ this, scalar, length, offset
    READLINE this
    GETC this
    WRITE this, scalar, length, offset
    PRINT this, LIST
    PRINTF this, format, LIST
    CLOSE this
    DESTROY this

スカラを実装するクラスは、以下のメソッドを提供しなければいけません。
    TIESCALAR classname, LIST
    FETCH this,
    STORE this, value
    DESTROY this

上記全てのメソッドを、必ずしも実装しなければいけないというわけではありません。 perltie Tie::Hash Tie::Array Tie::Scalar Tie::Handle それぞれのマニュアルを参照してください。

dbmopen と異なり、 tie はモジュールに対して use require を行いません。必要ならば、別途行う必要があります。 DB_File のマニュアルを参照してください。

より詳しい内容は、 perltie マニュアルの"tied VARIABLE"の項目をご覧ください。

tied
SampleCode
tied VARIABLE
VARIABLE にバインドされているオブジェクトへのリファレンスを返します( tie 関数によって、パッケージをバインドした時に返す値と同じ値です)。 VARIABLE にパッケージがバインドされていない場合は、未定義値を返します。

time
SampleCode
time
epoch(MacOSでは、1904/1/1 00:00:00、その他の多くのシステムでは、1970/1/1 00:00:00 UTC)からの経過時間を秒で返します。一般的に gmtime localtime の引数として使用されます。

秒単位よりもよりも大まかな時間を簡単に得たいのであれば、 CPAN Time::HiRes モジュールやシステムコールの gettimeofday(2) syscall で呼び出す方法があります。詳細はマニュアルの perlfaq8 を参照してください。

times
SampleCode
times
ユーザー、システムタイム(秒)、このプロセス、その子のプロセスの4つの要素から成るリストを返します。
    ($user,$system,$cuser,$csystem) = times;

tr///
SampleCode
tr///
y/// と同じ置換演算子です。文字を1対1の対応で置換します。 s///g の正規表現を使った置換よりも高速に置換が行えます。詳しくはマニュアルの perlop を参照してください。

truncate
SampleCode
truncate FILEHANDLE,LENGTH
truncate EXPR,LENGTH
FILEHANDLE で指定されたファイル、もしくは EXPR と言う名前のファイルを、 LENGTH の長さに切りつめます。 truncate が実装されていないシステムでは、致命的エラーを返します。成功すると true を返し、未定義値が返るのはそれ以外の場合です。

uc
SampleCode
uc EXPR
EXPR を大文字にしたものを返します。これは \U エスケープを利用して実装しています。 use locale を使用していない場合は LC_CTYPE に依存します。 perllocale を参照してください。Unicodeを使用している場合( use utf8 )、Unicode標準のマッピングを利用して変換されます。(頭文字をタイトルケースマッピングによって変換しようとはしません。 ucfirst の方を参照してください)

引数が省略された場合は $_ が使用されます。

ucfirst
SampleCode
ucfirst EXPR
EXPR の最初の文字を大文字にして返します(Unicodeではタイトルケースです)。これは \U エスケープを利用して実装しています。 use locale を使用していない場合は LC_CTYPE に依存します。 perllocale utf8 のマニュアルを参照してください。

引数が省略された場合は $_ が使用されます。

umask
SampleCode
umask EXPR
EXPR のプロセスの umask を設定し、それまでの値を返します。引数が省略された場合、現在の umask のみを返します。

Unixのパーミッションの"rwxr-x---"は3ビットの3セットや"0750"の様な8進数の3桁の数で表されます(最初の0は8進数を表し、数値の桁ではありません)。

umask の値はパーミッションのどのビットを使用禁止にするかを示す値です。あなたが mkdir または sysopen に渡すパーミッション値は umask の値によって修正されます。たとえば、 sysopen にパーミッション値"0777"を渡してファイルを作成したとしても、 umask の値が"0022"に設定されていれば、実際に作成されるファイルのパーミッションは"0755"になります。つまり、 umask で設定された許可ビットは、 mkdir sysopen に渡す値に関係なく、常にオフになります。

もし、 umask(2) が実装されていない場合、アクセス制限があれば、致命的エラーを、なければ undef を返します。

umask の値は8進数の数値で、文字列ではありませんので注意してください。 oct の説明も参照してください。

undef
SampleCode
undef EXPR
EXPR を未定義値に設定します。
スカラ、配列( @ )、ハッシュ( % )、サブルーチン( & )、型グロブ( <*> )に使用できます(ハッシュの要素を削除する場合には delete を使用します)。

戻り値は常に未定義値です。引数を省略した場合、未定義値のみを取得することができ、サブルーチンで未定義値を返したい場合、パラメータで未定義値を渡したい場合などに使用できます。また、リストの戻り値の一部に undef を使用することで、その値を捨てることができます。

unlink
SampleCode
unlink LIST
リストのファイルを削除します。戻り値は削除に成功したファイルの数です。
	$cnt = unlink 'a', 'b', 'c';
	unlink @goners;
	unlink <*.bak>;

管理者でなければ unlink でディレクトリの削除は行えません。"-U"フラグもサポートしていますが、システムに致命的な損害を与える可能性があることを否定できませんので、通常は代わりに rmdir を使用してください。

引数が省略された場合は $_ が使用されます。

unpack
SampleCode
unpack TEMPLATE,EXPR
unpack pack の逆の機能があり、文字列を受け取り、それをリスト値に展開して返します(スカラコンテキストで呼び出した場合は、最初の値のみ返します)。

TEMPLATE を元にしてチャンクに分割し、それぞれのチャンクを対応する値へと変換します。一般的に引数は pack の返す値やバイト文字列が使われます。 TEMPLATE pack と同じ形式です。

以下のサブルーチンは substr 関数と同じの働きをします。
    sub substr {
        my($what,$where,$howmuch) = @_;
        unpack("x$where a$howmuch", $what);
    }

また、以下は ord 関数と同じ働きです。
    sub ordinal { unpack("c",$_[0]); } # same as ord()

pack()で許されるフィールドに加えて、チェックサムのビット数を %<number> の形で指定できます。指定しない場合の、デフォルトの値は、16ビットです。チェックサムは値の数値を計算することで求められます(文字列なら ord($char) で求められます)。たとえば、以下は System V のサム・プログラムと同じ計算を行います。
    $checksum = do {
        local $/;  # slurp!
        unpack("%32C*",<>) % 65535;
    };

以下はビットベクタのセットビット数を効率的に数えます。
    $setbits = unpack("%32b*", $selectmask);

p または P フォーマットを使用する際は特に注意が必要です。Perlにはポインタが正しい位置を示しているかをチェックする方法がないため、間違った値を指定した場合にはメモリの破壊が起きることもあります。

もし、 TEMPLATE のリピートカウントが入力文字列より長いならば、リピート回数は少なくなり、入力文字列のほうが長いならば、文字列の残りの部分は無視されます。

pack に関する説明も参照してください。

untie
SampleCode
untie VARIABLE
変数とパッケージの結びつきを解除します。( tie を参照)

unshift
SampleCode
unshift ARRAY,LIST
shift の反対の機能を持ちます。または、見方によっては push の反対の機能、となるかもしれません。 ARRAY の配列の先頭に LIST を挿入し、新しい配列の要素数を返します。
unshift(ARGV, 'e') unless $ARGV[0] =~ /^/;

LIST は一度に挿入されるため、順番は変更されません。逆順にしたい場合は、 reverse を使用してください。

use
SampleCode
use Module VERSION LIST
use Module VERSION
use Module LIST
use Module
use VERSION
指定されたモジュールを現在のパッケージにインポートします。以下のような記述と同等です。
    BEGIN { require Module; import Module LIST; }

VERSION はPerlのバージョン( $^V または $PERL_VERSION の値)を指定できます。実行時にPerlのバージョンが指定された値よりも小さい場合、エラーを発生させて、実行を中止できます。
    use v5.6.1;         # コンパイル時のバージョンチェック
    use 5.6.1;          # 同上
    use 5.005_03;       # 小数の形式でも指定できます

これは、使用するモジュールやライブラリが古いバージョンのPerlと互換性がない場合などに使用されます。

BEGIN require import をコンパイル時に実行します。 require はモジュールがロードされていなければ、メモリ上に読み込みます。 import はPerlの組み込み関数ではなく、モジュールに対して、そのパッケージを現在のパッケージにインポートするように指示するものである。モジュールは import を任意に実装できますが、多くのモジュールは Exporter モジュールの Exporter クラスを継承して実装しています( Exporter のマニュアルを参照)。パッケージに import メソッドが見つからない場合は、呼び出しはスキップされます。ネームスペースを変更されることを望まない場合は、空リストを明示的に渡します。
    use Module ();

これは、以下のような記述と同等です。
    BEGIN { require Module }

もし、 VERSION Module LIST の間に指定された場合、モジュールの VERSION メソッドを VERSION を引数として呼び出します。一般的に VERSION メソッドは UNIVERSAL クラスを継承していて、 $Module::VERSION よりも大きな値を与えられることを期待します。

LIST を省略した場合、引数無しで import を呼び出し、空リスト"()"を与えた場合には import は呼ばれません。( VERSION の後にカンマはありません)

これはワイドオープンインターフェイスなので、プラグマ(コンパイラに対する設定)もこの関数で宣言されます。現在、以下のようなプラグマが実装されています
    use integer;
    use diagnostics;
    use sigtrap  qw(SEGV BUS);
    use strict   qw(subs vars refs);
    use subs     qw(afunc blurfl);
    use warnings qw(all);

これらは通常のモジュールと異なり、現在のスコープのブロックへ影響します(通常のモジュールは現在のパッケージの終わり、もしくはファイルの終わりまで影響を与えます)。

no use に対応する関数で、アンインポートを行います( import の代わりに unimport Module LIST を呼び出します)。
    no integer;
    no strict 'refs';
    no warnings;

もし、 unimport メソッドが見つからない場合は、致命的なエラーを発生させます。

perlmod マニュアルの一般モジュールやプラグマの部分を参照してください。

utime
SampleCode
utime LIST
ファイルのアクセス時間と修正時間を変更します。 LIST の最初二つの値は、アクセス時間と修正時間でなければなりません(この順番で)。戻り値は、変更に成功したファイルの数です。各ファイルの inode 変更時間は現在の時間に設定されます。
以下のコードは、すでにファイルが存在する場合、 touch と同じ効果が得られます。
	#!/usr/bin/perl
	$now = time;
	utime $now, $now, @ARGV;

values
SampleCode
values HASH
ハッシュに含まれる全ての値をリストとして返します(スカラコンテキストで実行した場合、値の数を返します)。返される値の並びは見かけ上ランダムです。この並びは将来のPerlで変更される可能性がありますが、変更の行われていない同じハッシュに対して keyseach を使用した場合に返される順番と同じ事は保証されます。

この関数でハッシュの値を変更することはできません。なぜなら、 values はハッシュのコピーを返すためです。変更が必要な場合は、 values ではなく、ハッシュのスライスを使用します。
	for (values %hash)      { s/foo/bar/g }   # 失敗!
	for (@hash{keys %hash}) { s/foo/bar/g }   # 成功

values を呼び出した場合の別の効果として、 HASH の内部的な反復子のリセットがあります。 keyseachsort も参照してください。

vec
SampleCode
vec EXPR,OFFSET,BITS
EXPR の文字列を BITS 幅の要素で構成されたビットベクタとして扱い、 OFFSET の位置から符号無し整数として値を返します。したがって、 BITS にはビットベクタで予約されているビット数を指定します。これは、1~32の値、かつ2の階乗でなければなりません(プラットフォームがサポートしていれば、64も使用可能です)。

もし、 BITS が8であれば、バイト単位での読み込みとなります。

BITS が16以上であれば、バイト単位でグループ化されて、 BITS /8個のつながりとなり、それぞれのグループを pack() / unpack() 使って数値に変換します(常にビッグエディアンと見なされます)。 pack も参照してください。

BITS が4以下であれば、バイトの一部と見なされ、バイトは8/ BITS グループ含みます。1バイトのビットは、0x01、0x02、0x04、0x08、0x10、0x20、0x40、0x80のようにリトルエディアン方向で数えられます。たとえば、「chr(0x36)」は二つのグループに分けると、"(0x6, 0x3)"となり、4つのグループに分けると"(0x2, 0x1, 0x3, 0x0)"となります(戻り値はリストです)。

vec は以下のように使うことで、式の左辺として使用でき、目的の場所に
値を割り当てることができます。
	vec($image, $max_x * $x + $y, 8) = 3;

もし、選択された要素が文字列の外にある場合、0を返します。また、文字列の範囲外に書き込もうとした場合、Perlは0を追加して、文字列の長さを伸ばします。これは文字列の開始点を変更してしまいます(すなわち、 OFFSET が意味を持たなくなります)。

文字列に255以上の値を持つ文字を含めることはできません(起こりうるのは、UTF8エンコーディングを使っている場合のみでしょう【訳注:日本語などの多バイト言語などの時も起こりうると思います】)。UTF8以外にエンコードしてください。 vec が適用された場合、その文字列はそれ以降、UTF8の文字列として扱われません。言い換えるならば、UTF8の文字が含まれる場合、 vec() は文字列をバイト列として見なし、一般的な文字列としては見なしません。

vec によって作られた文字列は、論理演算子の"|"や"&"、"^"、"~"で扱えます。これらの演算は両方のオペランドが文字列である場合、ビットベクタ演算が行われます。 perlop の"Bitwise String Operators"の項目を参照してください。

以下はASCIIで'PerlPerlPerl'文字列を作るコードです。コメントはそれぞれのステップを実行した後での文字列の状況です。このコードはビッグエディアンのシステム、リトルエディアンのシステムのいずれも同じように機能します。
	my $foo = '';
	vec($foo,  0, 32) = 0x5065726C;     # 'Perl'

	# $foo eq "Perl" eq "\x50\x65\x72\x6C", 32 bits
	print vec($foo, 0, 8);              # prints 80 == 0x50 == ord('P')

	vec($foo,  2, 16) = 0x5065;         # 'PerlPe'
	vec($foo,  3, 16) = 0x726C;         # 'PerlPerl'
	vec($foo,  8,  8) = 0x50;           # 'PerlPerlP'
	vec($foo,  9,  8) = 0x65;           # 'PerlPerlPe'
	vec($foo, 20,  4) = 2;              # 'PerlPerlPe'   . "\x02"
	vec($foo, 21,  4) = 7;              # 'PerlPerlPer'
	                                    # 'r' は "\x72"
	vec($foo, 45,  2) = 3;              # 'PerlPerlPer'  . "\x0c"
	vec($foo, 93,  1) = 1;              # 'PerlPerlPer'  . "\x2c"
	vec($foo, 94,  1) = 1;              # 'PerlPerlPerl'
	                                    # 'l' は "\x6c"

以下のコードでビットベクタと0と1のリストを相互に変換することができます。
$bits = unpack("b*", $vector);
@bits = split(//, unpack("b*", $vector));

ビットの正確な長さが判っているならば、その値を"*"の代わりに使用することもできます。

以下に実際にどのように機能するかは、サンプルコードを参照してください。

wait
SampleCode
wait
システムコールの wait(2) のように振る舞います。子のプロセスが終了するのを待ち、そのpidを返します。子のプロセスが存在しない場合は、-1を返します。ステータスは"$?"にセットされます。

waitpid
SampleCode
waitpid PID,FLAGS
PID で指定した子のプロセスが終了するのを待ち、終了後、 PID を返します。子のプロセスが存在しない場合は、-1を返します。いくつかのシステムでは0を返しますが、その場合、プロセスはまだ存在しています。ステータスは"$?"にセットされます。以下のように記述することで、ノン・ブロッキングでゾンビプロセスを待つことが出来ます。
	use POSIX ":sys_wait_h";
	#...
	do {
		$kid = waitpid(-1, WNOHANG);
	} until $kid > 0;

ノン・ブロッキング待ちは waitpid(2) wait4(2) のシステムコールをサポートしているシステムで利用できます。しかし、 FLAGS に0を指定して、特定のpidを待つことは、多くのシステムで可能です。(Perlはプロセスに出力したステータスの値を覚えていることによって、取得できなかったプロセスに対して、システムコールをエミュレートします)

多くのシステムでは-1を返しますが、これは子のプロセスがすでに終了したことを示します。 perlipc などを参照してください。

wantarray
SampleCode
wantarray
現在実行しているサブルーチンが、リストコンテキストで呼ばれている場合には true を、スカラコンテキストで呼ばれている場合には false を返します。また、戻り値が無視される場合は未定義値を返します。
	return unless defined wantarray;    # don't bother doing more
	my @a = complex_calculation();
	return wantarray ? @a : "@a";

warn
SampleCode
warn LIST
die の様に STDERR にメッセージを出力しますが、例外を発生させません。もし LIST が空で、 $@ に値(通常は、直前に評価した式の値が入ります)が含まれていれば、それを使用し、 $@ に"\t...caught"を追加します。 $@ が空の場合は、"Warning: Something's wrong"という文字列が使用されます。

$SIG{__WARN__} ハンドラは warn の動作を定義することができるため、これが使用されている場合には、何もメッセージが表示されないことがあります。ほとんどのハンドラは、そのハンドラ内部でもう一度 warn を呼び出す前にその振る舞いを定義するしますが、この時呼び出される warn に関して、ハンドラはフックしませんので、無限ループに陥ることはありません。

この振る舞いは $SIG{__DIE__} ハンドラとは若干異なります。

__WARN__ ハンドラを使うことは、全ての警告を表示させないとても効果的な手段です。以下の例のように使用します。
    # コンパイル時の警告を全て消す
    BEGIN { $SIG{'__WARN__'} = sub { warn $_[0] if $DOWARN } }
    my $foo = 10;
    my $foo = 20;          # 警告は表示されません

    # この行までのコンパイル時、実行時の警告は表示されません
    $DOWARN = 1;

    # これ以降は警告が機能します
    warn "\$foo is alive and $foo!";     # 表示されます

perlvar マニュアルの %SIG の詳細や例を参照してください。その他の警告に関しては、 Carp モジュールの carp() 関数や cluck() 関数を使用してください。

write
SampleCode
write FILEHANDLE
write EXPR
FILEHANDLE にそれに関連付けられたフォーマットを用いて、書式化されたレコード(複数行の場合もあります)を書き込みます。フォーマットが特に指定されていない場合、ファイルハンドルと同名のフォーマットが使用されますが、カレントファイルハンドル( select を参照)のフォーマットは $~ 変数を設定することで指定することができます。

フォーマット処理は以下のように行われます。

書式化されたレコードを書き込む余白が現在のページに残っていれば、書き込みを行い、足りなくなれば次のページに移動します。新しいページの最初にはページトップのフォーマットで書式化されたレコードが書き込まれます。

特に指定しないと、ページトップのフォーマットは _TOP に関連付けられたフォーマットが使用されますが、 $^ 変数を設定することで動的にフォーマットを変更できます。

現在のページの残り行数は $- にセットされていますが、これに0をセットすることで強制的に新しいページへ移動できます。

FILEHANDLE が明示されない場合、データはカレントファイルハンドルに出力されますが、これは select 関数で変更できます。

引数として変数( EXPR )が使用された場合、その変数は評価され、その文字列がファイルハンドルとして見なされます。より詳しいフォーマットの情報は、 perlform のマニュアルを参照してください。

なお、 write read の反対の機能を持っているわけではありません。

y///
SampleCode
y///
置換演算子です。 tr/// と同じですので、そちらを参照してください。

ファイルテスト演算子
SampleCode
演算子 FILENAME
演算子 FILEHANDLE
ファイルの状態を取得できる演算子です。通常は、 stat ではなく、こちらを使う方がお勧めです。各演算子は下記の通りです。なお、システムによっては取得できない項目もあります。

-e   ファイルが存在する
-z   ファイルのサイズが0
-s   ファイルサイズを取得(バイト単位)
-f   通常のファイル
-d   ディレクトリ

-r   実行uid/gidで読み出し可
-w   実行uid/gidで書き込み可
-x   実行uid/gidで実行可
-o   実行uid/gidが所有
-R   実uid/gidで読み出し可
-W   実uid/gidで書き込み可
-X   実uid/gidで実行可
-O   実uid/gidが所有

-l   シンボリックリンク
-p   名前付きパイプ(FIFO)
-S   ソケット
-b   ブロックスペシャルファイル
-c   キャラクタスペシャルファイル
-t   ファイルハンドルがttyに対してオープンされている
-u   setuidビットがセットされている
-g   setgidビットがセットされている
-k   stickyビットがセットされている

-T   テキストファイル
-B   テキストファイルでない
-M   修正されてからの日数(スクリプト実行開始時を基準)
-A   最後にアクセスされてからの日数(スクリプト実行開始時を基準)
-C   inodeが変更されてからの日数(スクリプト実行開始時を基準)


(c) NetworkTactics