frank cui wrote:
hi,
Hello,
I'm reading the book of "automating system administration with perl" and having doubts about this code snippets about file health check. # attempt to read the directory entry for this file my @stat = stat($name);
That should probably be: my @stat = stat($name) or return 0;
if ( !$stat[4] && !$stat[5] && !$stat[6] && !$stat[7] && !$stat[8] ) { return 0; # according to the code context, here it is saying the file is NOT ok } here $name refers to the file name and it's checking the stat of this file. stat[4:8] refers to the following from the "perldoc -f stat" 4 uid numeric user ID of file's owner 5 gid numeric group ID of file's owner 6 rdev the device identifier (special files only) 7 size total size of file, in bytes 8 atime last access time in seconds since the epoch so here the code is actually saying if all the above entries is 0 or undefined, then we declare this file to be NOT ok . and my question would be about this logic, why are we checking all of them with a AND relationship rather than OR, or maybe something else(like checking all the 0-12 entries) ?
That looks like a general heuristic that the author assumed would indicated a bad file. As to whether it would work accurately is mute (there are a lot of files with a UID, GID and RDEV of 0, assuming he is reading from the whole file system.)
John -- Any intelligent fool can make things bigger and more complex... It takes a touch of genius - and a lot of courage to move in the opposite direction. -- Albert Einstein -- To unsubscribe, e-mail: beginners-unsubscr...@perl.org For additional commands, e-mail: beginners-h...@perl.org http://learn.perl.org/