sironekotoroの日記

Perl で楽をしたい

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}
    );
}

Perl トレーニングブック を終えて

  • 例文にuse strict,use warningsがついていないのはつらかった
    • そういう時代だったのだろうか
  • その章で習った事の実力を試すテストなのに、そこに含まれていない解決策が回答例としてきて出てきて、とてもとても萎える
    • globとか
  • Windows用に、とのことで作られた本なので文字コードに1章使っているのが惜しい。
  • この本で学習したあと、どう進めば良いのか?の指針が無い。
  • 全くの初心者だったら投げ出してたと思うけど、今までのそれなりの積み重ねのおかげでなんとか終える事が出来て嬉しい。
  • 初心者向け技術書って作るの大変だよなぁ・・・