2011年8月2日火曜日

開発環境

  • Mac OS X Snow Leopard (OS)
  • TextWrangler(Text Editor) (いずれはBBEditを入手したい!)
  • Script言語:Perl

『続・初めてのPerl 改訂版』(Randal L. Schwartz, brian d foy, Tom Phoenix 著、伊藤 直也、田中 慎司、吉川 英興 監訳、株式会社ロングテール/長尾 高弘 訳、オライリー・ジャパン、2006年、ISBN4-87311-305-9) の9章(リファレンスを使った実践的なテクニック), 9.9(練習問題)、4を解いてみる。

 

4.

コード(TextWrangler)

#!/usr/bin/perl
use strict;
use warnings;

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 "Cannot open dir $path: $!";
    my @names = readdir 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){
    if(values %directory == 1){
      print ", with a content:\n";
    } else {
      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("."));

Desktopに適当にフォルダ、ファイルの階層を作成して実験。

入出力結果(Terminal)

確認できた!

0 コメント:

コメントを投稿