
Perlリファレンス
関数:A-C | D-F
| G-I | J-O
| P-R |
S-T | U-Z
演算子:
定義済み変数:
※Perl5.004のman
pageを参考にしています。
- ■scalar 式
- 与えた式を無理やりスカラーコンテキストとして評価します。スカラーコンテキストとリストコンテキストを区別する関数や、配列の個数を取りたい時などに役立ちます。
なお、無理やりリストコンテキストとして評価する関数はありません。代わりに
@{[ 式 ]}
を使うとよいでしょう。
- ■seek(ファイルハンドル,位置,どこから?)
- ファイルハンドルの現在の読み込み/書き込み位置を制御します。2つめの引数は何バイト目に位置を移動させるか、そして3つめは
0=ファイルの最初から何バイトか
1=現在の読み込み位置から何バイトか
2=ファイルの最後から何バイトか
を与えてください。
一部のシステムでは読み込みから書き込みに切り替えるのにseekしなければエラーとなる場合があります。その場合seek(FH,0,1);とするとよいでしょう。
- ■seekdir(ディレクトリハンドル,位置)
- telldir()で取得したディレクトリハンドルの読み込み位置をこの関数で設定します。
※決して「何番目のファイルの位置にセットする」という意味ではありません。
- ■select([ファイルハンドル])
- 現在のprintなどでのデフォルト出力先(標準出力)を返します。また、1つめの引数にファイルハンドルを指定すると、標準出力先を切り替えられます。
◇ワンポイントアドバイス
ファイルハンドルのバッファリングなど、設定を切り替える時に
select((select(FH),$|=1)[0]);
という面白い技があります。これで現在の標準出力を切り替えずに設定を変えることができます。
- ■select,send,setsockopt→ネットワーク
■sem*→セマフォ
■setpgrp,setpriority→UNIX
■shift(ディレクトリハンドル,位置) [デフォルト@ARGV/サブルーチン内では@_]
- 配列の最初の要素を切り出して返します。
※与えた配列は最初の要素が切り出されますので要素数が1つ減ります。
- ■shm*→共有メモリ
■shutdown→ネットワーク
■sin( [ラジアン]
) [デフォルト$_]
- サイン関数です。それだけ(汗)
- ■sleep( [秒] )
- 指定した秒数だけスクリプトの実行を停止します。引数がないとSIGALRMが来るまで永遠に停止しつづけます。
- ■socket,socketpair→ネットワーク
- ■sort(リスト)
■sort &サブルーチン リスト
■sort { ブロック } リスト
- あるリスト(配列など)を順番通り並べて返します。何も指定せず
@sorted = sort(@data); というふうにした場合は(use
localeなど使っていない場合は)ASCIIコード順に並べ替えます。
リストと共に指定するサブルーチンやブロック内では$aと$bを使います。これは現在並べ替え作業中の2つの値で
$a>$b……正の値
$a=$b……0
$a<$b……負の値
を返す(returnする)ようなスクリプトを組むようにします。通常はcmpや<=>で計算した値をそのまま返す場合が多いので、あまりこのことは気にしなくても使えます(笑)
たとえばアルファベット順/逆アルファベット順に文字列を並べ替えたい場合は
@sorted = sort { $a cmp $b } @data;
@sorted = sort { $b cmp $a } @data;
というふうにします。逆アルファベット順では$bと$aの位置を入れ替えるだけです、、、
@sorted = sort { lc($a) cmp lc($b) } @data;
とすれば大文字小文字関係なく並べ変えます(lc関数で小文字に統一してから比較しています)
もちろん@dataに数値が入っていて、その大小で並べ替えたい場合は
@sorted = sort { $a <=> $b } @data;
@sorted = sort { $b <=> $a } @data;
のようにします。上が小さい順、下が大きい順であることに注意。
……ちなみに @sorted = sort { return ($a <=> $b) } @data;
のように書いてもちゃんと動きますが、サブルーチンを指定するならともかく、ブロックでは「最後に評価した式が返り値となる」性質を使ってreturnを書かずにスマートに済ませることをおすすめします。
$aや$bの値を書き換えると元のデータがぐちゃぐちゃになります。注意してください。
- ■splice( 配列 , 位置 , [長さ] ,
[置き換えリスト] )
- 指定した配列のある位置からある長さ分の要素を置き換えます。
置き換えリストを省略すれば単純に指定した位置からいくつかの要素を削除します。また、長さを省略した場合は1を指定したことになります。
返ってくる値は削除された要素のリストです。
- ■split( [/パターン/] , [文字列] ,
[最大分割数]
) [デフォルト$_]
- joinの逆で、指定した文字列をあるパターンに基づいて分割します。例えばタブ区切りにしたい場合は
@data = split( /\t/ , $text );
というふうにします。
パターンを省略すれば空白文字(スペース、タブなど…)で分割します。
最大いくつまで分割したいかも指定できます。例えば
@data = split ( /\s/ , "a b c d e" , 3);
とすると@dataには( "a" , "b" , "c d e"
)の3つに分割されて入ります。
- ■sprintf→printf/sprintの書き方(Coming
Soon)
-
- ■sqrt( [数]
) [デフォルト$_]
- 二乗根(ルート)を計算した結果を返します。
- ■srand( [ランダムな数]
) [デフォルト:time()とPIDで導き出すランダムな数/5.003以前はtime()]
- rand()で使われる乱数の「種」を設定します。
5.004以降では通常の用途では特に引数を与える必要はないでしょう。
- ■stat( [ファイルハンドル/ファイル名]
) [デフォルト$_]
- 与えたファイルの様々な情報を返します。返り値は以下のようなリストです。
0 デバイス番号
1 i-node番号
2 ファイルモード(パーミッション)
3 このファイルへのハードリンクの数
4 ファイル所有ユーザーID
5 ファイル所有グループID
6 デバイス情報(ふつうのファイルでは関係ありません)
7 ファイルサイズ(バイト)
8 最終アクセス時刻
9 最終変更時刻
10 最終i-node変更時刻
11 ブロックサイズ
12 占有ブロック数
UNIX以外のOSではほとんど機能しません。また、返される時刻はUNIXでは1970.1.1の真夜中からの秒数ですが、これもOSによって異なり、例えばMacでは1904.1.1の真夜中が基準になります。
ほぼ同じ機能を持つものとして
-? [ファイルハンドル/ファイル名]
という型式もあり、?の部分に以下の文字を入れるとそれぞれの情報を取りだせます。
有効UID/GIDで:-r 読み込み可 -w 書き込み可 -x 実行可 -o 所有者は私
実UID/GIDで:-R 読み込み可 -W 書き込み可 -X 実行可 -O 所有者は私
-u setuid -g setgid -k スティッキー
-e ファイル存在 -z ファイルサイズが0 -s ファイルサイズ
-f ファイル -d ディレクトリ -l シンボリックリンク -p 名前付きパイプ
-s ソケット -b ブロックデバイス -c キャラクタデバイス -t コンソール
-T テキストファイル -B バイナリファイル
-M スクリプト実行開始時からファイル変更時刻までに何日あいているか(小数点以下有り)
-A (同)最終アクセス時刻までに何日あいているか
-C (同)最終i-node変更時刻までに何日あいているか
ファイルハンドルとして"_"(アンダースコア)を与えると、最後にstat()や-sなどでファイル情報を取得した時のデータを使います。何度も同じファイルの情報にアクセスしたい時にこれを使用すると速度が上がります。
- ■study( [文字列]
) [デフォルト$_]
- パターンマッチの速度を上げるため、前もってマッチ対象文字列を解析します。
ただし、同じ文字列に対して何度もパターンマッチをする場合以外は効果はありません。
- ■substr(文字列,開始位置,[長さ])
- ある文字列のある場所からある長さ分だけの文字を取り出します。ただし、指定する開始位置は0からスタートし、長さを省略すると文字列の最後まで取り出します。
開始位置には負の値も指定でき、その場合「最後から何文字目」を指定したことになります。
print substr("0123456789",2,2); "23"を返す
print substr("0123456789",8); "89"を返す
print substr("0123456789",-4,2); "67"を返す
また、substr()に代入することもできます。例えば
$data = "0123456789";
substr($data,6,2) = "AB";
とすると、$dataの中身は"012345AB89"となります。
- ■symlink(リンク先,リンクファイル名)
- シンボリックリンクを作成します(Macではエイリアスを作成します)
サポートされていないOS(Windowsなど)でこれを実行すると致命的エラーとなり途中で終了してしまいます。これを防ぐためには
eval { } で囲んでおきましょう。
- ■syscall→UNIX
- ■sysopen,sysread,syswrite,sysseek [混ぜるな危険]
- それぞれほぼopen,read,write,seekと同じですが、OSの関数を直接呼び出して処理を行います。そのため多少は処理速度は上がりますが、普通はまず使う必要はないでしょう。
なお、sysopenしたファイルハンドルをreadするなど、混ぜて使用してはいけません。
- ■system(コマンド) [UNIX依存]
- 指定したコマンド(UNIXでの)を実行し、それが終了するまで待ったのち終了ステータスを返します。
- ■tell( [ファイルハンドル] )
- 現在のファイルの読み込み位置を返します。引数を省略すると直前のファイルアクセスでの値を返します。
- ■telldir(ディレクトリハンドル)
- 現在のディレクトリハンドルの読み込み位置を返します。seekdir()と対で使うとよいでしょう。
※決して「何番目のファイルの位置」という意味ではありません。
- ■tie(変数,パッケージ名,引数リスト)
- 変数(主にハッシュ)をあるパッケージに結び付け、そのパッケージ内の複雑な処理を変数の書き換えという単純な処理の中に隠蔽してしまうための関数で、untieと対になって使われます。dbmopen/dbmcloseと同等の処理もこれで実現できます。例えばDB_Fileモジュールの場合、use
DB_File;した後に
tie %hash, 'DB_File', ファイル名, 読み書きモード, パーミッション,
$DB_HASH;
とするとBerkeley
DBファイルに%hashを結び付けられます。なお、読み書きモードはO_CREAT|O_RDWR(無い時は作成+読み書き可)、パーミッションは666がデフォルトなので、単に
tie %hash, 'DB_File', ファイル名;
とするだけで通常の利用には差し支えないでしょう。
この関数は処理時に作られるオブジェクトへのリファレンスを返します。細かい設定を変えたい時などに使用してください。
- ■tied(変数)
- tie()処理時に作られるオブジェクトへのリファレンスを返します。tie()されていなかった場合はundefとなります。
- ■time()
- 現在時刻を返します。返される時刻はUNIXでは1970.1.1の真夜中からの秒数ですが、OSによって異なり、例えばMacでは1904.1.1の真夜中が基準になります。
- ■times()
- 現在のプロセス(perl)とその子プロセスが消費したCPU時間を返します。
(ユーザ時間,システム時間,子ユーザ時間,子システム時間) =
times();
- ■truncate(ファイルハンドル/ファイル名 , サイズ)
- 指定したファイルをある大きさに切り詰めます。例えば
open(FH,"+<file.txt"); のように読み書きモードで開いた200バイトのファイルに100バイトまでデータを書き込んだ後、残りは要らないといった場合にtruncate(FH,100)といったように使います。
◇ワンポイントアドバイス
tell()関数とあわせて、truncate(FH,tell(FH))とやる場合が大半だと思います(現在の書き込み位置でファイルを終わりにする)
-
Return : Perl
Top