08/04/14 08:31:02
>>117
再起してるからじゃね?先にファイル一覧を取得してclosedirしてから再起呼び出しするか、
ディレクトリハンドル(DIR)をローカル変数に浮かすかすればインジャネ?
traverse_html ※1 の中で traverse_html ※2 を呼び出す
→ ※1のDIRを※2で上書きする
→ ※1に戻ったとき ※2のDIRはclose済み
テストしてないから動くかは知らんけどこんな感じ。
sub traverse_html {
my $dirname = shift;
my $delim = '/';
my @entrys = undef;
my $i = 0, $j = 0;
if ($dirname =~ /[\/\\]$/) {
$delim = '';
}
print "<ul>\n";
opendir(DIR, $dirname) or die "$dirname: $!";
foreach my $entry (readdir(DIR)) {
next if ($entry eq '.');
next if ($entry eq '..');
$entrys($i++) = $entry;
}
closedir(DIR);
for ($j=0;$j<$i;j++){
my $filename = "$dirname$delim$entrys($j)";
if (-d $filename) { print "<li>$entrys($j)\n"; &traverse_html($filename); }
else { &do_html($filename, $entrys($j)); }
}
print "</ul>\n";
}