Translate

2008年8月14日木曜日

File::Findモジュール

あるディレクリ内のファイルを再帰的に探し出したい!
という時に使えるモジュールですね。

今回のコードはこんな環境で使ったとします。

test.pl
┗ etc
 ┗ h001.html
  ┣ pic
  ┃ ┗ g001.gif
  ┃
  ┗ file
   ┣ c001.css
   ┗ j001.js

use strict;
use warnings;
use File::Find;

my $directory = "./etc"; #./etcをスタートしてその配下を探索。
find(\&output, $directory); #ファイルorフォルダを見つけるたびに\&outputを参照。

sub output{
print "\$File::Find::dir : $File::Find::dir\n";
print "\$_ : $_\n";
print "\$File::Find::name : $File::Find::name\n\n";
}


実行結果
---------------------------------------
$File::Find::dir : ./etc
$_ : .
$File::Find::name : ./etc

$File::Find::dir : ./etc
$_ : file
$File::Find::name : ./etc/file

$File::Find::dir : ./etc/file
$_ : c001.css
$File::Find::name : ./etc/file/c001.css

$File::Find::dir : ./etc/file
$_ : j001.js
$File::Find::name : ./etc/file/j001.js

$File::Find::dir : ./etc
$_ : pic
$File::Find::name : ./etc/pic

$File::Find::dir : ./etc/pic
$_ : g001.gif
$File::Find::name : ./etc/pic/g001.gif

---------------------------------------
見ての通りなんですが
$File::Find::dirで起点からのパスが格納されます。
$_は、ファイル名orフォルダ名が格納されます。
$File::Find::nameで起点からのパス + (ファイル名|フォルダ名)となってます。

0 件のコメント: