blog20100901

2013/08/20 - プログラミング言語 Perl にまつわる etc. - Perl monger
参考 : perldoc, perldoc.jp, search.cpan.org, perldoc.perl.org ...
「 初めての Perl 第 6 版 」(オライリー・ジャパン発行 ISBN978-4-87311-567-2) 」
「 続・初めての Perl 改訂版 」(オライリー・ジャパン発行 ISBN4-87311-305-9) 」
「 Effective Perl 第 2 版 」(翔泳社発行 ISBN978-4-7981-3981-4) 」 ... etc,.

Perl Perl_0

Perl 「 ファイルハンドル 」: Open a filehandle (0x43)

Perl 「 ファイルハンドル 」: Open a filehandle (0x43)

目次 - Perl Index



Theme



Perl について、復習を兼ねて断片的な情報を掲載して行く連載その 0x43 回。

Perl でファイルハンドルをオープンする。




open 演算子



Perl でファイルハンドル (外部ファイルとのコネクション) を開くには、「 open 」演算子を利用します。

open 演算子の書式は次の通りです。


open FILEHANDLE, EXPR
open FILEHANDLE, MODE, EXPR
open FILEHANDLE, MODE, EXPR, LIST
open FILEHANDLE, MODE, REFERENCE
open FILEHANDLE


open 演算子は、「 EXPR 」に指定されたファイルを開き、そのコネクションを「 FILEHANDLE 」と結び付けます。

「 MODE 」は、シェルの記法をベースにした「 < 」や、「 > 」等を使った動作を指定します。ファイルを開く、ファイルに出力するといった動作です。

open 演算子の使用例 : 入力



まず、ファイルを開いて読み込みます。次の例はすべて同じ意味です。


open FILE, 'myfile';
open FILE, '<myfile';
open FILE, '< myfile';


「 FILEHANDLE 」には、文字列「 FILE 」を指定しています。これをカンマで区切って、読み込みたいファイルのファイル名を指定します。

ここでのファイル名は「 myfile 」です。ここはシングルクォートで囲んであります。

シェルの記法を元にした、小なり記号「 < 」は、その有無に関係なくファイルを読み込みますが、現実的には、セキュリティの観点等から「 < 」を含めるべきだと言います。

また、ファイル名の前後の空白は無視される仕様です。これも、シェルの記法を元にしたものなのだそうです。

これで、指定されたファイル名「 myfile 」の中身は、ファイルハンドル「 FILE 」として参照され、プログラム内で自在に加工することが出来る様になります。

open 演算子の使用例 : 出力



次に、ファイルを指定して書き出しを行います。


open FILE, '>newfile';
open FILE, '>>addfile';


1 行目の例は、大なり記号「 > 」を使って、ファイルハンドル 「 FILE 」の値を書き出しています。

書き出し先にあたるファイル名「 newfile 」が、システムに存在しなければ新規に作成され値が書き込まれます。同名のファイルが存在する場合は、書き出された値に " 上書き " されます。

2 行目の例は、「 >> 」を使っています。これは、書き出された値を " 追加 " で書き込む場合に使います。

「 < 」と違い、「 > 」と「 >> 」は省略出来ません。

open 演算子の注意点



既に確認した通り、open 演算子はファイル名の前後の空白を無視しますが、不慮の事態をさけるためには空白を挿入しておいた方が安全だと言うことです。

具体的には、ファイルに値を出力する際に、( あまりないことかもしれませんが ) ファイル名の先頭に 「 > 」があった場合、予期せぬ追加書き込みを誘発することがあるからです。

例えば次の様に。


$file = '>ouch';
:
.
open FILE, ">$file";


ファイル名の指定にはこの様に任意のスカラ変数を指定することができます。

4 行目の open は、ファイルを " 上書き " するための書き方として特に落ち度はありません。

前出の例との違いといえば、変数展開のためのダブルクォートをしているくらいです。

しかしながら、スカラ変数「 $file 」に入ったファイル名は「 >ouch 」なので、結果的には次の様になります。


open FILE, '>>ouch';


期待している " 上書き " はされることなく、値はとめどなく " 追加 " されることになります。

0x43 -> 0x44 へ



open 演算子は Perl 5.6 以降では、ちょっと違った書き方が出来ます。

この比較的新しい書き方は、書式でいうところの、「 open FILEHANDLE, MODE, EXPR 」が該当する様に思います。こちらの方が、セキュリティ的にも優れていて、かつ応用も効きそうなので、次回紹介します。


参考情報は書籍「 初めての Perl 第 6 版 」を中心に perldoc, Wikipedia および各 Web サイト。それと詳しい先輩。

目次 - Perl Index





















同じカテゴリー(Perl)の記事
 Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228) (2023-10-11 23:49)
 Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227) (2023-05-26 15:41)
 Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226) (2023-05-19 17:05)
 Perl mp2 翻訳 テンプレートシステムの選択 (d225) (2022-08-15 22:23)
 Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224) (2022-06-15 20:43)
 Perl mp2 翻訳 チュートリアル (d223) (2022-06-15 20:42)
上の画像に書かれている文字を入力して下さい
 
<ご注意>
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。

Llama
リャマ
TI-DA
てぃーだブログ
プロフィール
セラ (perlackline)
セラ (perlackline)
QRコード
QRCODE
オーナーへメッセージ

PAGE TOP ▲