「初めての Perl」勉強6日目

今日は時間があんまし無かったので1セクションのみです><

第十二章 ディレクトリ操作

練習問題1

次のようなプログラムを書いてください。まずユーザからディレクトリ名を入力してもらい、そのディレクトリに移動します。もしユーザが入力した行に空白文字だけしか含まれていなければ、デフォルトの動作として、そのユーザのホームディレクトリに移動します。移動したら、そのディレクトリの内容(ただし、ドットで始まるファイルを除く)をアルファベット順に表示します。

#!/usr/local/bin/perl -w

chomp (my $dir = <STDIN>);
if ($dir =~ /\s/) {
    $dir = "~/";
}

my @files = <$dir/*>;
foreach my $file (sort @files) {
    next if $file eq "." or $file eq "..";
    print $file."\n";
}

最初はディレクトリハンドルを使った方法で書いてたけど、めちゃめちゃ悩んで結局グロブに変更した。

練習問題2

問題1のプログラムを改造して、ドット以外で始まるものだけでなく、全てのファイルを表示するようにしてください。

#!/usr/local/bin/perl -w

chomp (my $dir = <STDIN>);
if ($dir =~ /\s/) {
    $dir = "~/";
}

opendir DIR, $dir or die "cannot open $dir: $!";
foreach my $file (my @files = readdir DIR) {
    print $file."\n";
}

なぜか今度はディレクトリハンドルを使った方法だったりw

練習問題3

問題2をディレクトリハンドルを使って解いた人は、それをグロブを使うように書き換えてください。グロブを使って解いた人は、ディレクトリハンドルを使うように書き換えてください。

#!/usr/local/bin/perl -w

chomp (my $dir = <STDIN>);
if ($dir =~ /\s/) {
    $dir = "~/";
}

my @files = <$dir/.* $dir/*>;
foreach my $file (@files) {
    print $file."\n";
}

方針転換が仇となった><
でもとりあえずこれでよいはず。