後でやってみる。
browse_directory("c:\\mydoc\\"); sub browse_directory{ local($dir)=@_; local(*DIR,$file); if(!opendir(DIR, $dir)){ return; } while ($file = readdir(DIR)) { if(($file eq ".") || ($file eq "..")){ next; } if (-d "$dir\\$file") { browse_directory("$dir\\$file"); }else{ $file_size = -s "$dir\\$file"; $file_size{"$dir\\$file"} = $file_size; $file_name{"$dir\\$file"} = $file; } } closedir(DIR); } foreach $fullpath (sort {$file_size{$b} <=> $file_size{$a}} keys %file_size) { print "$fullpath,$file_size{$fullpath},$file_name{$fullpath}\n"; }
指定したディレクトリ配下のファイルについて、フルパス、サイズ、ファイル名を取得してサイズの降順に並べる。
しかしこれには不具合がある。たまたま、フォルダ名が「○○表」というフォルダがあった。これがフォルダとしてではなく、ファイルとして認識されてしまったのだ。回避方法はあるようだがメンドクサイし意味がわからない。
shift-jisはダメだな。「ヤカン」が「ポット」とマッチするという冗談みたいなことが起きる。
while(<>){ if(/ポット/){ print; print " matched\n"; }else{ print; print " unmatched\n" } }
このスクリプトに「ヤカン」という文字列を含むファイルを読ませると、マッチする。