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
siteC:\Perl\hajip>perl ex12-2.pl
指令されたディレクトリの、ドットファイルを含む全てのファイルを表示するプログラムです。
ディレクトリ名を入力してください。
空白文字しか入力されていません。代わりにホームディレクトリへ移動します。
移動先ディレクトリの内容を表示します。
.
..
.bash_history
.cpan
.emacs
.emacs.d
.emacs~
.kkcrc
.recentf
TUTORIAL.ja
bin
calc.pl
font-setup.el
perlC:\Perl\hajip>
OKですね。