ためになるホームページ お問い合わせ




TOP > Perl > ファイルハンドル
ファイルハンドルをオープンする
ファイルハンドルをオープンするには、openを使う。
(書式) open ファイルハンドル名, ファイル名;

ファイルハンドルをオープンする例
open H_READ, "aaa.txt";     #読み込みモードで開く
open H_READ, "< bbb.txt";   #読み込みモードで開く
$fname = "ccc.txt";
open H_READ, "$fname";      #読み込みモードで開く
open H_READ, "< $fname";    #読み込みモードで開く
open H_WRITE, "> ddd.txt";  #新規書き込みモードで開く
open H_WRITE, ">> eee.txt"; #追加書き込みモードで開く
open H_WRITE, "> $fname";   #新規書き込みモードで開く


ファイルハンドルをクローズする
使用したファイルハンドルをクローズする
(書式) close ファイルハンドル名;

ファイルハンドルをオープンする時の処理
ファイルハンドルが無効であった際に、適切に処理を行う必要がある。
die関数を使って処理をする。die関数は、指定したメッセージを標準エラーストリームに表示していから0以外の終了ステータスでプログラムを終了させる。

ファイルオープン時の処理の例
open H_READ, "< bbb.txt" or die "can not open bbb.txt error $!"; #$!には、システムからのメッセージ
#また、dieと同じような処理を行うwarnもある。
#warnはdieと同じように警告を出すが、強制終了はしない。
open H_READ, "< bbb.txt" or warn "can not open bbb.txt error $!"; #$!には、システムからのメッセージ


ファイルハンドルを使う
正常にファイルハンドルを取得したら、ファイルハンドルを行入力演算子でくくり、処理を行う。

ファイルハンドルを使う例
open H_READ, "< aaa.txt";
while ()
{
  chomp;
  if (/****/)
  {
    //処理
  }
}
close(H_READ);
#以下の例は、ある文字列を書き込む処理
open H_WRITE, "> ccc.log" or die "create error ccc.log $!";
for ($i = 0; $i < 10; $i++)
{
  #printやprintfに出力先を指定してあげる必要がある
  #デフォルトでは、STDOUTのため
  print H_WRITE "$i\n";
}
close(H_WRITE);
#明示的に、STDOUTから変更する事もできる
select H_WRITE;
open H_WRITE, "> ccc.log" or die "create error ccc.log $!";
for ($i = 0; $i < 10; $i++)
{
  #printやprintfに出力先を指定してあげる必要がある
  #デフォルトでは、STDOUTのため
  print "$i\n";
}
close(H_WRITE);
select STDOUT; #元に戻す  


出力操作をバッファリングする前にフラッシュする
デフォルトでは、各ファイルハンドルに対する出力はバッファリングされる。もし、出力操作をする度に、フラッシュさせたければ、特殊変数「$|」に1を入れる

出力操作をバッファリングする前にフラッシュする例
open H_WRITE, "> ccc.log" or die "create error ccc.log $!";
select H_WRITE; #明示的に出力先の指定
$| = 1; #H_WRITEに対してバッファリングせずにフラッシュさせる
select STDOUT; #元に戻す
print H_WRITE "hahahahaha\n"; #バッファリングせずに、書き込みが行われる
close(H_WRITE);


ファイルテスト
以下のファイルテストを使って、ファイル状態を調べる事ができる
  • -r ファイルやディレクトリがユーザまたはグループから読み出し可能
  • -w ファイルやディレクトリがユーザまたはグループから書き込み可能
  • -x ファイルやディレクトリがユーザまたはグループから実行可能
  • -o ファイルやディレクトリがユーザが所有している
  • -R ファイルやディレクトリが実ユーザまたはグループから読み出し可能
  • -W ファイルやディレクトリが実ユーザまたはグループから書き込み可能
  • -X ファイルやディレクトリが実ユーザまたはグループから実行可能
  • -O ファイルやディレクトリが実ユーザが所有している
  • -e ファイルやディレクトリ名が存在している
  • -z ファイルが存在していて、サイズが0である(ディレクトリに関しては常に偽)
  • -s ファイルやディレクトリが存在していてサイズが0ではない
  • -f エントリは通常ファイルである
  • -d エントリは普通のディレクトリである
  • -l エントリはシンボリックである
  • -S エントリはソケットである
  • -p エントリは名前付のパイプである
  • -b エントリはブロック特殊デバイスである
  • -c エントリはキャラクタ特殊デバイスである
  • -u ファイルやディレクトリがsetuidされている
  • -g ファイルやディレクトリがsetgidされている
  • -k ファイルやディレクトリにstickyビットが付いている
  • -t ファイルハンドルは、TTYである。
  • -T ファイルはテキストファイルであるようである
  • -B ファイルはバイナリファイルであるようである
  • -M 最後に変更されてからの日数
  • -C 最後にinodeが変更されてからの日数






  • Copyright 2007 ためになるホームページ All Rights Reserved.