12章 練習問題2

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

12章 練習問題1 - ABラボラトリを手直しするだけですね。
以下が作成コードです。

#! /usr/local/bin/perl

use strict;
use warnings;

#プログラムの説明を出力
print "指令されたディレクトリの、ドットファイルを含む全てのファイルを表\示するプログラムです。\n";

#ユーザにディレクトリ名を入力してもらう。メッセージを出力した後、標準入力を読み込む
print "ディレクトリ名を入力してください。\n\n";
chomp(my $dir = <STDIN>);

#何も入力されていないか判定する
die "何も入力されませんでした。プログラムの実行を終了します。\n"
    if ($dir eq '');

#指定ディレクトリに移動する。空白文字のみ入力された場合は、ユーザのホームディレクトリに移動する。入力された場合は、指定ディレクトリに移動
if ($dir =~ /^\s+$/) {
    print "空白文字しか入力されていません。代わりにホームディレクトリへ移動します。\n";
    chdir or die "ホームディレクトリに移動できませんでした。\n";
} else {
    chdir "$dir" or die "$dir ディレクトリに移動できませんでした。\n";
    print "$dir ディレクトリへ移動します。\n";
}

#ドットで始まるファイルを含む、移動先ディレクトリの内容を昇順に表示する(ドットで始まるファイルが必要なので、globの引数を複数指定する)

my @files = glob("* .*");
print "移動先ディレクトリの内容を表\示します。\n";
for (@files) {
    print "$_\n";
}

実行結果です。

C:\Perl\hajip>perl ex12-2.pl
指令されたディレクトリの、ドットファイルを含む全てのファイルを表示するプログラムです。
ディレクトリ名を入力してください。

c:/perl/
c:/perl/ ディレクトリへ移動します。
移動先ディレクトリの内容を表示します。
#ChangeLog#
ChangeLog
ChangeLog~
archive
bin
cpan
cpan.cgi
cpan.pl
eg
foo.bat
hajip
hoge.pl
hoge.pl~
hoge.txt
html
html-downcase.pl
jcode.pl
lib
site
.
..

C:\Perl\hajip>perl ex12-2.pl
指令されたディレクトリの、ドットファイルを含む全てのファイルを表示するプログラムです。
ディレクトリ名を入力してください。


空白文字しか入力されていません。代わりにホームディレクトリへ移動します。
移動先ディレクトリの内容を表示します。
bin
calc.pl
font-setup.el
perl
TUTORIAL.ja
.
..
.bash_history
.cpan
.emacs
.emacs.d
.emacs~
.kkcrc
.recentf


よさげですね。
解答を参考に問題箇所の洗い出しをします。

  • 今度はsortが必要
    • 昇順に並べ替えたとき、ドット文字は英文字に先行するよう。

では、それを踏まえて書き直してみます。
…というか、

for (sort @files)

こう変更するだけですね。

実行結果は以下のようになりました。

C:\Perl\hajip>perl ex12-2.pl
指令されたディレクトリの、ドットファイルを含む全てのファイルを表示するプログラムです。
ディレクトリ名を入力してください。

c:/perl/
c:/perl/ ディレクトリへ移動します。
移動先ディレクトリの内容を表示します。
#ChangeLog#
.
..
ChangeLog
ChangeLog~
archive
bin
cpan
cpan.cgi
cpan.pl
eg
foo.bat
hajip
hoge.pl
hoge.pl~
hoge.txt
html
html-downcase.pl
jcode.pl
lib
site

C:\Perl\hajip>perl ex12-2.pl
指令されたディレクトリの、ドットファイルを含む全てのファイルを表示するプログラムです。
ディレクトリ名を入力してください。


空白文字しか入力されていません。代わりにホームディレクトリへ移動します。
移動先ディレクトリの内容を表示します。
.
..
.bash_history
.cpan
.emacs
.emacs.d
.emacs~
.kkcrc
.recentf
TUTORIAL.ja
bin
calc.pl
font-setup.el
perl

C:\Perl\hajip>

OKですね。