Perl Perl_0
Perl 「 ファイルハンドル 」: 3 引数の open 演算子 (0x44)
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
Perl mp2 翻訳 Web コンテンツ圧縮の FAQ (d228)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)
Perl mp2 翻訳 既知のブラウザのバグの回避策をいくつか (d227)
Perl mp2 翻訳 Perl と Apache でのキュートなトリック (d226)
Perl mp2 翻訳 テンプレートシステムの選択 (d225)
Perl mp2 翻訳 大規模 E コマースサイトの構築 (d224)
Perl mp2 翻訳 チュートリアル (d223)