12章練習問題

問1

#!/usr/bin/perl
use strict;
use warnings;

print "ディレクトリ名を入力してください。\n";
chomp(my $dir = <STDIN>);

($dir =~ /^\s*$/) ? chdir : chdir $dir
    or die "ディレクトリの移動に失敗しました。\n";

print "$_\n" for <*>;

動作に問題はないけど、エラーメッセージをもうちょっとわかりやすくした方がよかったかも。

問2

#!/usr/bin/perl
use strict;
use warnings;

print "ディレクトリ名を入力してください。\n";
chomp(my $dir = <STDIN>);

($dir =~ /^\s*$/) ? chdir : chdir $dir
    or die "ディレクトリの移動に失敗しました。\n";

print "$_\n" for <* .*>;

<* .*>はドット以外で始まるファイルをアルファベット順に並べたものの後ろに、ドットで始まるファイルをアルファベット順で並べたものがあるリストを返す。つまり全体で見れば、アルファベット順に並んでいないので、sortする必要がある。

print "$_\n" for sort <* .*>;

問3

#!/usr/bin/perl
use strict;
use warnings;

print "ディレクトリ名を入力してください。\n";
chomp(my $dir = <STDIN>);

($dir =~ /^\s*$/) ? chdir : chdir $dir
    or die "ディレクトリの移動に失敗しました。\n";

opendir DIR, "."
    or die "ディレクトリのオープンに失敗しました。\n";

print "$_\n" for sort readdir DIR;