サンプル集  >  perl  >  ファイル書き込みのエラー処理
ファイル書き込みのエラー処理
2012/09/27

ファイルへの書き込み時にエラーが出た場合どうなるか試してみます。

◆環境
OS CentOS Linux version 2.6.18-308.13.1.el5
perl v5.8.8 built for i386-linux-thread-multi

作成するファイルを存在しないパス/hoge/に作るようにします。

file-write2.pl
1: 
2: 
3: 
4: 
5: 
6: 
open(FILE, ">""/hoge/file-test.txt");

print FILE "file write!!\n";
print FILE "line 2\n";

close(FILE);

実行してみます。

# perl file-write2.pl
#

なんの反応も無く終わりました。 フォルダの状況を見てみます。

# ls -l
合計 8
-rw-r--r-- 1 root root 107  9月 27  2012 file-write2.pl

当然ファイルはできていません。 /hogeの状況を確認します。

# ls -l /hoge
ls: /hoge: そのようなファイルやディレクトリはありません

/hogeというフォルダは無いので、当然エラーがでました。 perl でもエラーを出すべきです。 エラーを出すロジックを追加します。 またプログラムの進み具合がわかるように、要所要所でprintでメッセージを出すようにします。

file-write3.pl
 1: 
 2: 
 3: 
 4: 
 5: 
 6: 
 7: 
 8: 
 9: 
10: 
print "start\n";
open(FILE, ">""/hoge/file-test.txt") or die($!);
print "open ok\n";

print FILE "file write!!\n";
print FILE "line 2\n";
print "print ok\n";

close(FILE);
print "close ok\n";

実行してみます。

# perl file-write3.pl
start
そのようなファイルやディレクトリはありません at file-write3.pl line 2.

最初のprintで表示される「start」が出たあとすぐにエラーメッセージが表示され、そこで処理が止まりました。

openの後に追加した「or die($!)」は open の結果が偽(false)であった場合、or 以降を実行するという意味です。

$! には「そのようなファイルやディレクトリはありません」というメッセージが入ります。 「at file-write3.pl line 2.」は die が出しているメッセージです。

エラーを無視して進めると後々やっかいな事になりがちなので注意したいですね。

▲ PageTop  ■ Home


Copyright (C) 2012 ymlib.com