$VERSION
= 0.03;
my
$mswin
=
$Config
{
'osname'
} eq
'MSWIN32'
;
sub
new {
my
(
$class
,
$item
) =
@_
;
die
"You need to specify a file, folder or link name"
unless
defined
$item
;
$item
= File::Spec->rel2abs(
$item
);
my
$self
= {
NAME
=>
$item
};
if
(-d
$item
) {
$self
->{LOADED} = 0;
$self
->{CHILDREN} = {};
$self
->{ISOPEN} = 0;
}
bless
$self
,
$class
;
$self
->loadStat(
$item
);
return
$self
}
sub
accessed {
return
$_
[0]->{ACCESSED};
}
sub
child {
my
(
$self
,
$name
,
$obj
) =
@_
;
die
"You must supply a name option"
unless
defined
$name
;
if
(
$self
->isDir) {
$self
->{CHILDREN}->{
$name
} =
$obj
if
defined
$obj
;
return
$self
->{CHILDREN}->{
$name
}
}
carp
$self
->name .
" is not a directory"
}
sub
children {
my
$self
=
shift
;
if
(
$self
->isDir) {
my
$c
=
$self
->{CHILDREN};
return
keys
%$c
}
carp
$self
->name .
" is not a directory"
}
sub
created {
return
$_
[0]->{CREATED};
}
sub
isDir {
return
-d
$_
[0]->name;
}
sub
isFile {
return
-f
$_
[0]->name;
}
sub
isLink {
return
-l
$_
[0]->name;
}
sub
isOpen {
my
(
$self
,
$flag
) =
@_
;
if
(
$self
->isDir) {
$self
->{ISOPEN} =
$flag
if
defined
$flag
;
return
$self
->{ISOPEN}
}
carp
$self
->name .
" is not a directory"
}
sub
loaded {
my
(
$self
,
$flag
) =
@_
;
if
(
$self
->isDir) {
$self
->{LOADED} =
$flag
if
defined
$flag
;
return
$self
->{LOADED}
}
carp
$self
->name .
" is not a directory"
}
sub
loadStat {
my
(
$self
,
$item
) =
@_
;
my
(
$dev
,
$ino
,
$mode
,
$nlink
,
$uid
,
$gid
,
$rdev
,
$size
,
$atime
,
$mtime
,
$ctime
,
$blksize
,
$blocks
);
if
(-l
$item
) {
(
$dev
,
$ino
,
$mode
,
$nlink
,
$uid
,
$gid
,
$rdev
,
$size
,
$atime
,
$mtime
,
$ctime
,
$blksize
,
$blocks
) =
lstat
(
$item
);
}
else
{
(
$dev
,
$ino
,
$mode
,
$nlink
,
$uid
,
$gid
,
$rdev
,
$size
,
$atime
,
$mtime
,
$ctime
,
$blksize
,
$blocks
) =
stat
(
$item
);
}
$self
->{NAME} =
$item
;
$self
->{SIZE} =
$size
;
$self
->{ACCESSED} =
$atime
;
$self
->{MODIFIED} =
$mtime
;
$self
->{CREATED} =
$ctime
;
}
sub
modified {
return
$_
[0]->{MODIFIED};
}
sub
name {
return
$_
[0]->{NAME}
}
sub
size {
my
$self
=
shift
;
my
$size
=
$self
->{SIZE};
if
(
$self
->isDir) {
my
@c
=
$self
->children;
$size
=
@c
;
}
return
$size
}
1;