開発環境
- 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.
やり方の1つ。(「やり方は何通りもある」(TIMTOWTDI(There Is More Than One Way To Do It.)))
コード(TextWrangler)
#!/usr/bin/env perl use strict; use warnings; sub data_for_path{ my $path = shift; return undef if -f $path or -l $path; if (-d $path){ my %directory; opendir PATH, $path or die "Cannot 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 $indent = shift || ""; print "$indent$path"; if(not defined $data){ print "\n"; return; } my %directory = %$data; if(%directory){ print ", with contents:\n"; for(sort keys %directory){ dump_data_for_path($_, $directory{$_}, "$indent "); } } else { print ", an empty directory\n"; } } dump_data_for_path('.', data_for_path('.'));
入出力結果(Terminal)
$ perl sample.pl ., with contents: .DS_Store .out HASH(0x7fa4740277e0) coconet.dat date.txt gilligan.info ginger.info 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 sample, an empty directory sample.bak sample.pl sample_folder, with contents: .DS_Store sample_text sample_text.bak sample_text.out sample_text.out.bak skipper.info sortable_hash test test.bak test_folder, with contents: .DS_Store sample, with contents: sample.txt test_link test_new thurston.info total_bytes.dat $ find . -print . ./.DS_Store ./.out ./coconet.dat ./date.txt ./gilligan.info ./ginger.info ./HASH(0x7fa4740277e0) ./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 ./sample ./sample.bak ./sample.pl ./sample_folder ./sample_folder/.DS_Store ./sample_text ./sample_text.bak ./sample_text.out ./sample_text.out.bak ./skipper.info ./sortable_hash ./test ./test.bak ./test_folder ./test_folder/.DS_Store ./test_folder/sample ./test_folder/sample/sample.txt ./test_link ./test_new ./thurston.info ./total_bytes.dat $
0 コメント:
コメントを投稿