Go to the first, previous, next, last section, table of contents.


ファイル操作関数

Function: -X filehandle
Function: -X expr
Function: -X
X は以下にあげる文字で、ファイルテストを行なう。この単項演算子は、ファイ ル名かファイルハンドルを唯一の引数として動作し、「あること」について真で あるか否かを判定した結果を返します。引数が省略されると、`-t' では STDIN を調べますが、その他は $_ を調べます。特に記述されていなければ、真 として 1 を返し、偽として '' を返し、ファイルが存在しなければ、未定義値 を返します。みかけは変わっていますが、優先順位は名前付き単項演算子と同じ で、他の単項演算子と同じく、引数を括弧で括ることもできます。演算子には:

があります。

ファイルのパーミッション演算子 `-r', `-R', `-w', `-W', `-x', `-X' の解釈は、ファイルのモードとユーザの実効/ 実 uidと実効/実 gid のみから判断されます。実際にファイルが読めたり、書 けたり、実行できたりするためには、別の条件が必要かもしれません。スーパー ユーザには、`-r', `-R', `-w', `-W' に対して、常に 1 が返り、モード中のいずれかの実行許可ビットが立っていれば、`-x', `-X' にも 1 が返ることにも注意してください。スーパーユーザが実行す るスクリプトでは、ファイルのモードを調べるためには、stat() を行なうか、 uid を一時的に別のものにする必要があるでしょう。

例:

while (<>) {
    chop;
    next unless -f $_;  # 通常ファイル以外はスキップ
    ...
}

-s/a/b は、置換演算 (s///) の符号反転ではありません。しかし、-exp($foo) は期待どおりに動作します。マイナス記号の後に英字が 1 字続くときにのみ、 ファイルテストと解釈されます。

ファイルテスト `-T'`-B' の動作原理は、次のようになっていま す。ファイルの最初の数ブロックを調べて、変わった制御コードや上位ビットが セットされているような、通常のテキストには現れない文字を探します。そのよ うな文字が、たくさん (>30%) 見つかるようであれば、そのファイルは `-B' ファイルであると判断され、それほど見つからなければ、`-T' ファイルとなります。最初のブロックにヌル文字が含まれるファイルも、バイナ リファイルとみなされます。`-T'`-B' をファイルハンドルに対 して用いると、最初のブロックを調べる代わりに、標準入出力バッファを調べま す。調べたファイルの中身が何もないときや、ファイルハンドルを調べたときに EOF に達していたときには、`-T'`-B' も「真」を返します。

どのファイルテスト (あるいは、stat() や lstat()) 演算子にも、下線だけか ら成る特別なファイルハンドルを与えると、前回のファイルテスト (や stat) の stat 構造体が使われ、システムコールを省きます。(`-t' には使えま せんし、lstat() や `-l' は実ファイルではなく、シンボリックリンクの 情報を stat 構造体に残すことを覚えておく必要があります。) 例:

print "Can do.\n" if -r $a || -w _ || -x _;

stat($filename);
print "Readable\n" if -r _;
print "Writable\n" if -w _;
print "Executable\n" if -x _;
print "Setuid\n" if -u _;
print "Setgid\n" if -g _;
print "Sticky\n" if -k _;
print "Text\n" if -T _;
print "Binary\n" if -B _;

Function: chmod list
list に含まれるファイルの、パーミッションを変更します。list の最初の要素は、数値表現のモードでなければなりません。変更に成功したファ イルの数を返します。
$cnt = chmod 0755, 'foo', 'bar';
chmod 0755, @executables;

Function: chown list
list に含まれるファイルの所有者 (とグループ) を変更します。 list の最初の 2 つの要素には、「数値表現」の uid と gid をこの順序 で与えなければなりません。変更に成功したファイルの数が返されます。
$cnt = chown $uid, $gid, 'foo', 'bar';
chown $uid, $gid, @filenames;

passwd ファイルから数値表現でない uid を検索する例を示します:

print "User: ";
chop($user = <STDIN>);
print "Files: "
chop($pattern = <STDIN>);

($login,$pass,$uid,$gid) = getpwnam($user)
    or die "$user not in passwd file";

@ary = <${pattern}>;        # ファイル名の展開
chown $uid, $gid, @ary;

Function: link oldfile,newfile
oldfile にリンクされた、新しいファイル newfile を作ります。 成功時には 1 を、失敗時には 0 を返します。

Function: lstat filehandle
Function: lstat expr
stat() 関数と同じことをするが、シンボリックリンクが指しているファ イルではなく、シンボリック自体の statをとります。シンボリックリン クがシステムにインプリメントされていないと、通常の stat() が行な われます。

Function: mkdir filename,mode
filename で指定したディレクトリを、mode で指定した許可モード (を umask で修正したもの) で作成します。成功時には 1 を返し、失敗 時には 0 を返して $! (errno)を設定します。

Function: readlink expr
シンボリックリンクがインプリメントされていれば、シンボリックリンクの値を 返します。インプリメントされていないときには、致命的エラーとなります。何 らかのシステムエラーが検出されると、未定義値を返し、$! (errno)を設定しま す。expr を省略すると、$_ を使用します。

Function: rename oldname,newname
ファイルの名前を変更します。成功時には 1、失敗時には 0 を返します。ファ イルシステムにまたがって、パス名を付け替えることはできません。

Function: rmdir filename
filename で指定したディレクトリが空であれば、そのディレクトリを削 除します。成功時には 1 を返し、失敗時には 0 を返し、$! (errno) を設定し ます。filename を省略した場合には、$_ を使用します。

Function: stat filehandle
Function: stat expr
filehandle を通じてオープンされているファイルか、expr で指定 されるファイルの情報を与える、13 要素の配列を返します。stat に失 敗した場合には、空リストを返します。普通は、
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
   $atime,$mtime,$ctime,$blksize,$blocks)
       = stat($filename);

のようにして使います。

下線だけの _ という、特別なファイルハンドルを、stat に渡すと、実 際には stat を行なわず、stat 構造体に残っている、前回の stat やファイルテストの情報が返されます。例:

if (-x $file && (($d) = stat(_)) && $d < 0) {
    print "$file is executable NFS file\n";
}

(これは、NFS のもとでデバイス番号が負になるマシンでのみ動作します。)

Function: symlink oldfile,newfile
newfile として、oldfile へのシンボリックリンクを生成 します。成功時には 1 を返し、失敗時には 0 を返しま す。シンボリックリンクをサポートしていないシステム では、実行時に致命的エラーが発生します。これをチェ ックするには、eval を使用します:
$symlink_exists = (eval 'symlink("","");', $@ eq '');

Function: truncate filehandle,length
Function: truncate expr,length
filehandle 上にオープンされたファイルか、expr で名前を表わし たファイルを、指定した長さに切り詰めます。システム上に truncate がインプリメントされていなければ、致命的エラーとなります。

Function: unlink list
list に含まれるファイルを削除します。削除に成功したファイルの数を 返します。
$cnt = unlink 'a', 'b', 'c';
unlink @goners;
unlink <*.bak>;

注: スーパーユーザ権限で、Perl に `-U' を付けて実行した場合でなけれ ば、unlink でディレクトリを削除することはありません。この条件にあ う場合にも、ディレクトリの削除は、ファイルシステムに多大な損害を与える可 能性がありますので、特に注意が必要です。rmdir を代わりに使ってく ださい。

Function: utime list
ファイルのアクセス時刻と修正時刻を変更します。list の最初の 2 つの 要素に、数値で表わしたアクセス時刻と修正時刻を順に指定します。list の残りの要素が、変更の対象となるファイルです。変更に成功したファイルの数 を返します。各ファイルの inode 修正時刻には、その時点の時刻が設定されま す。touch コマンドの例です:
#!/usr/bin/perl
$now = time;
utime $now, $now, @ARGV;


Go to the first, previous, next, last section, table of contents.

検索式: