開発環境
- OS X Lion - Apple(OS)
- TextWrangler(Text Editor) (BBEditの機能制限無料版、light版)
- Script言語:Perl
『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也、田中 慎司、吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9) の9章(リファレンスを使った実践的なテクニック), 9.9(練習問題)4を解いてみる。
その他参考書籍
4.
コード(TextWrangler)
sample.pl
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use 5.016;
sub data_for_path{
my $path = shift;
if(-f $path or -l $path){
return undef;
}
if(-d $path){
my %directory;
opendir PATH, $path or die "can't opendir $path: $!";
my @names = readdir PATH;
closedir PATH;
for my $name (@names){
next if $name eq "." or $name eq "..";
$directory{$name} = data_for_path("$path/$name");
}
return \%directory;
}
warn "$path is neither a file nor a directory\n";
return undef;
}
sub dump_data_for_path{
my $path = shift;
my $data = shift;
my $pre = shift || 0;
print " " x $pre . "$path";
if(not defined $data){
print "\n";
return;
}
my %directory = %$data;
if(%directory){
print ", width contents:\n";
$pre += 1;
for(sort keys %directory){
dump_data_for_path($_, $directory{$_}, $pre);
}
} else {
print ", an empty direcotory\n";
}
}
dump_data_for_path(".", data_for_path("."));
入出力結果(Terminal)
$ ./sample.pl
., width contents:
.DS_Store
.out
Oogaboogoo, width contents:
date.pm
barney
betty
coconet.dat
date.txt
fred
gilligan.info
ginger.info
link_test
log
log_file.txt
lovey.info
ls.err
ls.out
maryann.info
monkeyman.info
numbers
perl_kamimura_blog
perl_program.bak.bak
perl_program.pl
perl_program1
perl_program1.bak
professor.info
result
sample, width contents:
.DS_Store
sample_folder, an empty direcotory
sample_folder copy, an empty direcotory
sample_folder copy 2, an empty direcotory
sample_folder copy 3, an empty direcotory
sample_folder copy 4, an empty direcotory
sample.pl
sample.pl.bak
sample.pl.bak.bak
sample_folder, width contents:
.DS_Store
sample1.bak
test
sample_text
sample_text.out
sample_text.out.bak
skipper.info
some_folder, width contents:
sample.pl
some_file
some_file1
some_file2
sortable_hash
standings.db
test.bak
test.out
test.txt
test_folder, width contents:
.DS_Store
sample, width contents:
sample.txt
test_link
thurston.info
tmp_folder, width contents:
sample.pl
some_folder, width contents:
some_file1
total_bytes.dat
$
0 コメント:
コメントを投稿