use strict; sub name2device { my $name=shift; (my $dev, my $ino,my $mode,my $nlink,my $uid,my $gid,my $rdev,my $size, my $atime,my $mtime,my $ctime,my $blksize,my $blocks)=stat($name); return $dev; } sub name2inode { my $name=shift; (my $dev, my $ino,my $mode,my $nlink,my $uid,my $gid,my $rdev,my $size, my $atime,my $mtime,my $ctime,my $blksize,my $blocks)=stat($name); return $ino; } sub inode2name { my $inode=shift; my $device=shift; opendir(DIR, "."); (my $dev, my $ino,my $mode,my $nlink,my $uid,my $gid,my $rdev,my $size, my $atime,my $mtime,my $ctime,my $blksize,my $blocks)=stat("."); if ($dev!=$device) { while (my $dname=readdir(DIR)) { (my $dev, my $ino,my $mode,my $nlink,my $uid,my $gid,my $rdev,my $size, my $atime,my $mtime,my $ctime,my $blksize,my $blocks)=stat("$dname"); if ($dev==$device) { return $dname; } } } else { while (my $dname=readdir(DIR)) { (my $dev, my $ino,my $mode,my $nlink,my $uid,my $gid,my $rdev,my $size, my $atime,my $mtime,my $ctime,my $blksize,my $blocks)=stat("$dname"); if ($ino==$inode) { return $dname; } } } } sub pwd { my $inode=shift; my $device=shift; (my $dev, my $ino,my $mode,my $nlink,my $uid,my $gid,my $rdev,my $size, my $atime,my $mtime,my $ctime,my $blksize,my $blocks)=stat(".."); if ($ino!=$inode) { chdir(".."); my $name=inode2name($inode, $device); pwd($ino, $dev); print "/$name"; } } pwd(name2inode("."), name2device(".")); print "\n";