--- title: 『新版Perl言語プログラミングレッスン入門編』第11章 ファイル操作のつづき author: kazu634 date: 2008-03-15 url: /2008/03/15/_905/ wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:3827;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - Perl ---
つづきだよー
あるファイルが存在するかどうかをチェックしたいときは「-e」を用いる。
use strict; use warnings; if (-e 'datafile.txt') { print 'Exists!', "\n"; } else { print 'Not Exists', "\n"; }
ファイルのサイズを知りたいときは-sを用いる。「サイズが0かどうか」を知りたいときは-zを用いる。
use strict; use warnings; print -s 'datafile.txt';
ファイルの古さを調べたいときに、-Mを用いる。
「テキストファイルかどうかを調べる」のが-Tで、「バイナリファイルかどうかを調べる」のが-Bです。ちなみ日本語が含まれていると、「バイナリファイル」として認識されることに注意。
こいつを使うと、カレントディレクトリのファイルを簡単に列挙できる。使い方は
<ワイルドカード>
となる。例は、
while (<*.txt>) { print $_, "\n"; }
引数にディレクトリが与えられれば、ディレクトリ内部を表示。引数にファイルを与えられれば、ファイルの中身を表示する。
use strict; use warnings; # 引数が指定されていない場合 if (@ARGV == ) { print 'Please give the argument.', "\n"; print 'For Example: perl temp.pl /', "\n"; exit; } # 引数を $arg に格納する my $arg = shift; # 引数がディレクトリとして認識できる if (-d $arg) { # ディレクトリを開く opendir(DIR, $arg) or die "$!"; # ディレクトリの中を一つ一つ @file に格納する while (my $file = readdir(DIR)) { # 親ディレクトリ・カレントディレクトリならば表示しない next if ($file eq '.'); next if ($file eq '..'); # ファイル or ディレクトリを表示する print $file, "\n"; } # きちんとディレクトリを閉じなきゃね closedir(DIR); } # 引数がファイル名として認識可能 if (-f $arg) { # ファイルを開く open(FILE, $arg) or die "$!"; # ファイルの内容を @f_content に格納する my @f_content = <FILE>; # 一気に表示 print @f_content; # 閉じる close(FILE); }
No. 0010 615
No. 0009 602
No. 0008 569
No. 0007 549
No. 0006 535
No. 0005 514
No. 0004 23
No. 0003 19
No. 0002 10
No. 0001 4
No. 0000 1
こいつはメールマガジンの購読数の推移を示したもの。こいつの購読数の伸びを計算するプログラムを作る。
use strict; use warnings; # 変数の宣言 my @nums = (); my @tmp_vols = (); my @tmp_nums = (); # ファイルを開く open(FILE, 'mmlog.txt') or die "$!"; while (my $data = <FILE>) { # 一行ずつ読み込んで@dataに格納 @nums = split(/\s+/, $data); # @tmp_volsと@tmp_numsに格納 push (@tmp_vols, $nums[] . $nums[1]); push (@tmp_nums, $nums[2]); } # ファイルを閉じる close(FILE); # 実際に表示させる for (my $i=; $i < @tmp_vols - 2; $i++) { print $tmp_vols[$i], '-', $tmp_vols[$i + 1], ' --> ', $tmp_nums[$i] - $tmp_nums[$i + 1], "\n"; }