09/04/04 15:09:01
>>481
最初に479に間違いがあったので訂正。
誤 4.面倒だから -e "${fn}/." で代用 (chdir/opendirにも使える/-fはopenで代用)
正 4.面倒だから -e "${fn}/./" で代用 (chdir/opendirにも使える. -fはopenで代用)
末尾への/.追加だけだと5.8.8以降ではchdirには使えなかった。
chdirの確認を常用してる5.8.7.813でしかやってなかったという単純ミス
>次にそこに対してopendirすると失敗するので、結局目的は果たせない
>例えば、ディレクトリ構造のツリーを表示するとかそんなプログラム
そんなに難しいことをやっているの? ツリー表示程度なら
sub tree {
# my(@dir,$ent) = map { chomp;$_ } `dir "$_[0]" /b/aD`; # ,`dir "$_[0]" /b/aDH`;
#↓は↑の手抜き変形でほぼ同内容
my(@dir,$ent) = eval { opendir my $h,"$_[0]/.";grep {-d "$_[0]/$_/." and !/^\.+$/} readdir $h };
while(defined($ent = shift @dir)) {
print "$_[1]+${ent}\n";
&tree("$_[0]/${ent}",@dir ? $_[1].'| ' : $_[1].' ');
}
}
&tree('.');
みたいにopendir無しでも書ける気がするし、opendirも成功しそうな気がするんだが。
opendirに関しては最悪DLL違いでの挙動差もありえなくは無いけどね。