2008-03-16から1日間の記事一覧

8.4 ファイル内の行、段落を後のものから順番に処理する

方法1 @lines = <FILE>; while ($line = pop @lines) { # $lineに対する処理を書く } 方法2 @lines = reverse <FILE>; foreach $line (@lines) { # $lineに対する処理を書く } 方法3: Tie::Fileモジュールを使用 use Tie::File; tie(@lines, "Tie::File", $FILENAME, mod</file></file>…

8.3 ファイル内の全ての単語を処理する

cshのforeach関数のように、ファイル内の全ての単語に対して、任意の処理を行いたい。 splitを使用して、各行を空白文字で分割する。 while (<>) { for $chunk (split) { # $chunkに対する処理を書く } } m//g演算子を使用して、単語を1つずつ取り出す while…

8.2 ファイル内の行数(段落数、レコード数)をカウントする

ファイル内の行数をカウントしたい wcコマンドを使用する方法 $cound = `wc -l < $file`; die "wc failed: $?" if $?; chomp($cound); ファイルをオープンして、1行ずつカウントする open(FILE, "<", $file) or die; $count++ while <FILE>; # $countには読み込ん</file>…

8.1 後続行を表す文字を含む行を読み込む

ファイル内に2行以上にわたる長い行がある。行末にはその後に継続行が続くことを示すバックスラッシュが付加されている。これらの分割された行を1行に結合したい。 バックスラッシュの付加されていない行に到達するまで、各行を順番に1つずつ連結して行く。 …

7.23 ブロックせずに行全体を読み取る

読み取りの準備ができたファイルハンドル(selectで検出)から、データ行を読み取りたい。しかし、Perlの通常の操作(readline関数)とselectを一緒に使用することはできない。なぜなら、が余分なデータをバッファリングするのに対して、selectはそのバッファの…

7.22 ブロックせずに多くのファイルハンドルから読み取りを行う

などは入力を待ってブロックしてしまうが、ブロックさせるのではなく、入力が読み取り可能かどうか通知させるようにしたい。これは、パイプ、ソケット、デバイス、他のプログラムなどから読み取りを行う場合に役に立つ。 タイムアウト値を0秒にして、select…

7.21 読み取り可能なバイト数を取得する

ファイルハンドルから読み取り可能なバイト数を取得したい。 ioctl関数のFIONREADリクエストを使用する。 $size = pack("L", 0); ioctl(FH, $FIONREAD, $size) or die; $seze = unpack("L", $size); # $sizeバイトの読み取りが可能