開発環境
- 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 コメント:
コメントを投稿