Perl学習ノート-ファイルテスト

3813 ワード

1.ファイルテストオペレータ
ファイルとディレクトリのテストオペレータ:
-r/-w/-x/-o:ファイルまたはディレクトリは、有効な(このプログラムを実行する責任を負う)ユーザーまたはグループにとって読み取り/書き込み/実行/所有である.これらのテストビットは、ファイルの権限ビットを見る、どのような操作が許可されているかを判断し、システムがアクセス制御リスト(ACL)を使用する場合、テストはリストによって判断されるが、テスト結果はオペレーティングシステムの見方にすぎないが、実際の状況によって制限され、実行することは必ずしも可能ではない、例えば空のファイルが実行されるが、意味はない.
-R/-W/-X/-O:ファイルまたはディレクトリは、実際のユーザまたはグループにとって読み取り/書き込み/実行/所有である.実際のユーザまたはグループのIDを用いることは、プログラムがset-ID方式で実行される際に非常に重要である.
-e:ファイルまたはディレクトリは存在します.
-z:ファイルは存在するがコンテンツがない(ディレクトリには常に偽)
-s:ファイルまたはディレクトリが存在し、コンテンツがあり、バイト単位のファイルサイズを返します.
-f:通常のファイル
-d:ディレクトリです
-l:シンボルリンク
S:socketタイプのファイルです
-p:名前付きパイプ、つまりFIFOキュー
-b:マウント可能なディスクなどのブロックデバイスファイル
-c:I/Oデバイスなどの文字デバイスファイル
-u/-g/-k:ファイルまたはディレクトリにsetuid/setgit/stickyビットが設定されています
-t:ファイルハンドルはTTYデバイス(システム関数isatty()のようなテストであり、ファイル名をこのテストすることはできません).ファイルがインタラクティブであればTTYデバイスと判断するので、通常のファイルやパイプは除外することができ、-t stdINが本物に戻ると、通常はインタラクティブな方法でユーザーにいくつかの問題を提起することができることを意味し、偽であれば、入力元はキーボードではなく一般的なファイルやパイプであることを示す.
-T/-B:テキストファイル/バイナリファイルのように見えます(判断が正確ではないため)
M/-A/-C:最終変更後/アクセス後/ファイルノード番号変更後現在までの日数
2.同一ファイルの複数属性テスト
if(-r$filename and-w$filename){}操作で同じファイルの属性が2回取得され、もったいない.仮想ファイルハンドルを使用できます.Perlに前回クエリーしたファイル情報で現在のテストを行うように伝えます. if(-r $filename and -w _){}は、前回取得した同じファイルの属性情報を問い合わせる限り、他の場所でもこの仮想ファイルハンドルを使用することができる. 
3.スタックファイルのテスト操作
複数のファイルのプロパティを一度にテストすることができます.ファイル名に近いテストは先に実行されます.順序は右から左ですが、通常はテスト順序は重要ではありません. if(-r -w -x -o -d $filename){} 
真偽値を返す以外のテストでは,スタック書き方は優れていない.たとえば、512バイト未満のディレクトリを確認したい場合:if(-s-d$filename<512){}はif((-d$filename and-s_)<512){}.ファイルテストは、ブール値と512を比較したものを返します.
4.statとlast関数
ファイルテストオペレータにより、あるファイルまたはファイルハンドルの共通属性を取得することができるが、ファイルリンク数や所有者IDなどを取得することはできない.stat関数を使用して、実行に失敗した(通常は無効なファイル名または存在しない)場合、空のリストを返し、13の数値要素のリストを返すことができる.
my($dev,$ino,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime, $blksize,$blocks) = stat($filename);

$devと$ino:ファイルが存在するデバイスの番号とファイルとのinode番号、この2つの番号はファイルの一意性を決定する.この組み合わせは、異なるファイル名(ハードリンクで作成)を有するも一意である.
$mode:ファイルのパーミッションビットセット、8進法
$nlink:ファイルまたはディレクトリのハードリンク数、つまりこのエントリに実際の名前がいくつあるかです. 
$uidおよび$gid:ファイル所有者のユーザ番号およびグループID.
$size:バイト単位のファイルサイズ.
$atime,$mtime,$ctime:3種類のタイムスタンプ
5. localtime() 
statなどの関数を用いる得られるタイムスタンプ値はlocaltime関数で読みやすい形式に変換できる.
my($sec,$min,$hour,$day,$mon,$year,$wday,$yday,$isdst)=localtime($timestamp);

戻り値:$monは0からカウントされるので、正しい値は+1であるべきです.年は1900年から現在までの年なので、正しい値は+1900です.$ydayは現在、今年の数日目で、範囲は(0-365)、1月1日から12月31日までです.
類似関数:
gmtime()とlocaltime()が世界標準時間(グリニッジ時間)に戻る
time()現在のタイムスタンプの取得
6.ビット演算オペレータ.
ビット別に左または非左シフト右シフトまたは完全にCと同じである.
ビット文字列の使用:ビットオペレータによって整数(少なくとも32ビット)とビット文字列を操作できます.ビット演算のいずれかのオペランドが文字列である場合、Perlはビット文字列として処理されます.たとえば、「xAA」|「x 55」;結果は「xFF」;これはPerlの中で少数の文字列と整数を区別する場所である.