Perlで書く  RSSを登録する

Perlに関するTipsや関数の使い方を紹介します。

最新号をメルマガでお届けします    
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。
2009/08/02

Perlで書く 2009.08.02 Vol.239

=====================================================================
Perlで書く 2009.08.02 Vol.239
[REF]open
http://www2u.biglobe.ne.jp/~MAS/perl/
=====================================================================
●open FILEHANDLE, EXPR
  open FILEHANDLE, MODE, EXPR
  open FILEHANDLE, MODE, EXPR, LIST
  open FILEHANDLE, MODE, REFERENCE
  open FILEHANDLE

 EXPRで指定されたファイルをオープンしてFILEHANDLEに結びつけます。
MODEがパイプモードの場合は、EXPRで指定されたコマンドを実行します。
 MODEがパイプモードの場合、LISTがコマンドラインオプションとして
コマンドに渡されます。
 第三引数がREFERENCEの場合、インメモリファイルを利用することができ
ます。
 MODEには以下のものを指定することができます。

┌──┬──────────────────────┐
│MODE│説明                                        │
├──┼──────────────────────┤
│<   │読み込み                                    │
│>   │上書き                                      │
│>>  │追加書き込み                                │
│+<  │読み書き両用(既存ファイルがない場合エラー)  │
│+>  │読み書き両用(既存ファイルがある場合上書き)  │
│+>> │読み書き両用(既存ファイルがある場合追記)    │
│|-  │出力をコマンドに渡す(パイプモード)          │
│-|  │コマンドの出力を受け取る(パイプモード)      │
└──┴──────────────────────┘

●サンプルプログラム

---------------------------------------------------------------------
# ファイルのデータを読み込む
use strict;
use warnings;

my $filename = 'document.txt';
open my $fh, "<", $filename or die "$!:$filename";
while (my $line = <$fh>) {
    print $line;
}
close $fh;
---------------------------------------------------------------------
# ファイルに追加書き込みする
use strict;
use warnings;

my $filename = 'data.txt';
open my $fh, ">>", $filename or die "$!:$filename";
print $fh '追加データ', "\n";
close $fh;
---------------------------------------------------------------------
# 文字コードを指定した読み込み
use strict;
use warnings;

my $filename = 'data.txt';

open my $fh, "<:utf8", $filename or die "$!:$filename";
my @lines = <$fh>;
close $fh;
---------------------------------------------------------------------
# コマンドを実行する
use strict;
use warnings;

my $cmd = 'netstat';

open my $fh, '-|', $cmd or die $!;
while (my $line = <$fh>) {
    print $line;
}
close $fh or die $! ? "Error:$!"
                    : "Status:$?";
---------------------------------------------------------------------
 以前は3引数のopen(open FILEHANDLE, MODE, EXPR)が使えなくて2引数の
open(open FILEHANDLE, EXPR)を使っていましたが書き方によってはファイル
名を外部から受け取るような場合に不正なコマンドを実行させる攻撃を受ける
脆弱性につながるため現在では通常利用しません。
---------------------------------------------------------------------
# 3引数のopen(通常の書き方)
open my $fh, ">>", $filename or die "$!:$filename";
# 2引数のopen(この書き方はしない)
open my $fh, ">> $filename" or die "$!:$filename";
---------------------------------------------------------------------
 以前はFILEHANDLEにFHのようなベアワードのファイルハンドルを指定する
方法も使われていましたが、ファイルのオープン中に同名のファイルハンドルを
使ってしまうと意図していない動作をしてしまうため、myを使った方法を通常は
利用します。
---------------------------------------------------------------------
# myを使った方法(通常の書き方)
open my $fh, ">", $filename or die "$!:$filename";
# ベアワード使った方法(この書き方はしない)
open FH, ">", $filename or die "$!:$filename";
---------------------------------------------------------------------

●関連項目

・ファイルを一文字列として読み込む
  http://www2u.biglobe.ne.jp/~MAS/perl/waza/fonestr.html
・binmode関数
  http://www2u.biglobe.ne.jp/~MAS/perl/ref/binmode.html
・eof関数
  http://www2u.biglobe.ne.jp/~MAS/perl/ref/eof.html
・getc関数
  http://www2u.biglobe.ne.jp/~MAS/perl/ref/getc.html
・print関数
  http://www2u.biglobe.ne.jp/~MAS/perl/ref/print.html
・printf関数
  http://www2u.biglobe.ne.jp/~MAS/perl/ref/printf.html
・read関数
  http://www2u.biglobe.ne.jp/~MAS/perl/ref/read.html
・sysopen関数
  http://www2u.biglobe.ne.jp/~MAS/perl/ref/sysopen.html

=====================================================================
■雑記

 以前から書こう書こうと思いながらも関連項目が多くてちょっと面倒
だからと後回しにしていたopen関数について書きました。思った通り
関連項目の修正が面倒でした。
 関連項目が多いというのはそれだけよく使う関数でもあるということ
ですから、書き終わってみれば書いて良かったと思っています。

=====================================================================
Perlで書く(マガジンID:0000109251) 配信数:837
発行者:MAS
本メールマガジンに関するご意見・お問い合わせは
t-masuda@mvd.biglobe.ne.jp までお寄せ下さい。

解除 http://www2u.biglobe.ne.jp/~MAS/perl/magazine.html
検索 http://www2u.biglobe.ne.jp/~MAS/perl/search/index.html
バックナンバー http://archive.mag2.com/0000109251/index.html
RSS  http://archive.mag2.com/0000109251/rss10.xml

本メールマガジンは「まぐまぐ」 http://www.mag2.com/ を利用して発行
しています。
=====================================================================
最新号をメルマガでお届け
登録 解除

規約に同意して

登録した方には、まぐまぐの公式メルマガ(無料)をお届けします。

最近の記事

上へ戻る