›hereランダムアクセスを使って読み書きする変更したい箇所だけをピンポイントで指定して、変更して書き戻すランダムアクセスのサンプルです。ランダムアクセスというのは一般的に固定長のバイナリファイルに対して使われますが、簡便のためここでは固定長テキストファイルを使います。ランダムアクセスによってファイル内容を書き換える。今回はpekoの年齢に1を加えてみる。pekoは2レコード目にあります。readするとファイルポインタが読み込んだ分だけ進むので、元の位置に戻す。$!";以下は読み込むデータです。(名前8バイト、年齢8バイト)というレコードが3つ並んでいるデータです。data_20080810.txtという名前で保存してください。qw(:seek);Fcntlモジュールから、seek関数に関連するシンボルをインポートします。いう3つの定数がインポートされます。今回はpekoの年齢に1を加えてみる。pekoは2レコード目にあります。$pos_age;固定長ファイルの場合は、直接バイト位置を指定できます。上記のように、1レコードの長さ、それぞれのデータの先頭からの位置とバイト数を定義しておくと、位置を指定するときに便利です。seek関数で、読み込みたいバイト位置まで移動する。$!";seek関数を使うとファイルポインタを、指定したバイト位置まで移動することができます。ファイルポインタというのは現在のファイルのバイト位置を覚えてくれている変数だと思ってください。第1引数はオープンしているファイルハンドル、第2引数は移動したいバイト位置、第3引数は基準とする位置(先頭、現在の位置、末尾)です。第3引数に指定できる定数は以下のとおりです。ファイルの末端を基準にする上記の位置を基準にして、第2引数の値が加算されます。先頭からのバイト位置を指定する場合は、SEEK_SETです。SEEK_ENDの場合は、第2引数は負の値を指定することになります。seek関数は失敗するとundefを返して、$!にエラー内容を設定します。bytes";}read関数を使うことで、指定したバイト数だけをファイルから読み込むことができます。第1引数はオープンしたファイルハンドル、第2引数は、読み込んだデータを格納するスカラー変数、第3引数は読み込むバイト数です。read関数の戻り値は、実際に読み込んだバイト数になります。リードエラーの場合は、undefが返り$!にエラー内容が設定されます。読み込んだバイト数が足りなかった場合、読み込みエラーの場合それぞれでエラー処理を行います。readするとファイルポインタが読み込んだ分だけ進むので、元の位置に戻す。$!";read関数は読み込んだ分だけファイルポインタの位置を進めます。再度同じ位置に書き込むためには、もう一度seek関数を呼び出します。$!";書き込みはprintf関数でフォーマットを指定して行います。%08sという指定で、「8桁の文字列で、8桁に満たない部分は0で埋める」ということを意味します。業務に役立つPerlログ解析など日本語を含むテキスト処理の実践!案内YouTubeでもっと簡単にプログラミングを学ぶならPerlゼミちゃんねるLinuxコマンドを学ぶならLinuxサーバー管理入門Webデザインを学ぶならWebデザイン入門Web開発を始めるななMojoliciousスタートアップブログを作るならGiblogプログラミングの勉強会ならPerl入学式お問合せはこちらPerlは、テキスト処理の記述性とパフォーマンスに優れ、正規表現が言語に組み込まれているプログラミング言語です。Linuxサーバー管理でのフィルタリングプログラム、複数行の文字列を処理、ファイル内容の検索・置換などが得意。Mojoliciousを使ったWebスタートアップも。Perlは、gitやopensslなどUnix/Linuxミドルウェアの支援ツールとして採用されています。このサイトはGiblogで製作されています。