Perl 「 ファイルハンドル 」: 3 引数の open 演算子 (0x44)

セラ (perlackline)

2013年11月29日 19:43



目次 - Perl Index



Theme



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

Perl 5.6 以降で使える 3 引数のファイルオープンについて。




3 引数の open



前回説明した open 演算子の利用方法は、引数を 2 つ受け取る方式でした。書式では次のものに相当すると思われます。


open FILEHANDLE, EXPR


もし、あなたの使う Perl のバージョンが 5.6 以降であれば、次の書式を利用することが出来ます。


open FILEHANDLE, MODE, EXPR


実際にどの様に指定するかを見てみましょう。

3 引数の指定



open 演算子に 3 つの引数を指定する場合は、次の様に「 , 」( Comma ) の区切りを追加します。


open FILE, '<', $filename;
open FILE, '>', $filename;
open FILE, '>>', $filename;


これにはいくつかメリットがあります。

まず、前回確認したようなモード ( > 等 ) に対するファイル名の干渉を防止出来ます。

例えファイル名が「 >filename 」だったとしても、モード「 > 」が干渉されることはありません。

また、ファイル名の先頭に空白があった場合、空白を空白として扱います。2 引数の open では空白が無視されてしまうことを思い出してください。

些細とも思えるこうした効果は、セキュリティの向上にも大いに役立つそうです。

また、3 引数の open では、エンコーディング ( Encoding ) の指定も可能です。

エンコーディングの指定は次の様に行います。


open FILE, '>:encoding(UFF-8)', $filename;


モードに続けて「 :encoding(文字コード) 」を指定しています。これで、出力先のファイルには、指定された文字コードで値が書き込まれます。

次の様に省略記法も用意されています。


open FILE, '>:utf8', $filename;


ただし、Perl は指定されたエンコーディングの確認はしませんので、該当するファイルの文字コードは予め確認しておく必要があります。

この話の詳細は perldoc - perluniintro あたりを参照してください。

0x44 -> 0x45 へ



Perl で利用出来るエンコードリストは、シェル上で以下のワンライナーを実行することで確認出来ます。


perl -MEncode -le "print for Encode->encodings(':all')"


また、Windows と Unix 系のオペレーティングシステム間の改行文字の差異を調整してくれる「 :crlf 」という特殊な設定もある様です。

文字コード関係は奥が不快、もとい、深いので、徐々に学習していきます。


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

目次 - Perl Index




















関連記事