Perlトレーニングブック Part 07 時間・ファイルの操作
時間・ファイルの操作
- なるほど、同じ変数名を使い回されるとこんなにも可読性が落ちるのか・・・というのをしみじみと思い知らされる
open(ファイルハンドル,“モード”,ファイル名)
「人類には早すぎる」ファイルハンドルでのファイル操作- でもPerl の標準
close(ファイルハンドル)
binmode
Windowsのみに関係ある話なのですが
- なら無視
スカラ変数 = <ファイルハンドル>
ファイルハンドルから1行分のデータ読み込み- ファイルを読み込んで表示する。
my $filename = "PerlTraining_211.pl"; open (FH , $filename); print <FH>; close(FH);
- ファイルを読み込み、大文字にして表示する
my $filename = "PerlTraining_211.pl"; open (FH , $filename); while(<FH>){ print uc($_) } close(FH);
print ファイルハンドル “データ\n”
ファイルを書き込む
my $filename = "PerlTraining_211.pl"; open( FH, $filename ); open( FHO, ">" , "PerlTraining_211_uc.pl" ); while (<FH>) { print FHO uc($_); } close(FHO); close(FH);
- フォルダ内のファイルのファイル名、行数、ファイルサイズを一覧で表示する
- 例題にはglobとかを出してきてたので、自分流で。
use strict; use warnings; use Data::Dumper; opendir( DIR, "." ); my @files = readdir(DIR); closedir(DIR); my $files; for my $filename (@files) { open( FH, $filename ) or die; my $count = 0; for my $line (<FH>) { $count++; } close(FH); $files->{$filename}->{fileline} = $count; $files->{$filename}->{filesize} = -s $filename; } for my $file ( sort keys $files ) { next if ( $file =~ /^\./ ); printf( "%-12s => %3d line %3d Size \n", $file, $files->{$file}->{fileline}, $files->{$file}->{filesize} ); }