our
@EXPORT_OK
=
qw/
age_string
mode_string
/
;
sub
age_string {
my
$age
=
shift
;
my
$age_str
;
if
(
$age
> 60 * 60 * 24 * 365 * 2 ) {
$age_str
= (
int
$age
/ 60 / 60 / 24 / 365 );
$age_str
.=
" years ago"
;
}
elsif
(
$age
> 60 * 60 * 24 * ( 365 / 12 ) * 2 ) {
$age_str
=
int
$age
/ 60 / 60 / 24 / ( 365 / 12 );
$age_str
.=
" months ago"
;
}
elsif
(
$age
> 60 * 60 * 24 * 7 * 2 ) {
$age_str
=
int
$age
/ 60 / 60 / 24 / 7;
$age_str
.=
" weeks ago"
;
}
elsif
(
$age
> 60 * 60 * 24 * 2 ) {
$age_str
=
int
$age
/ 60 / 60 / 24;
$age_str
.=
" days ago"
;
}
elsif
(
$age
> 60 * 60 * 2 ) {
$age_str
=
int
$age
/ 60 / 60;
$age_str
.=
" hours ago"
;
}
elsif
(
$age
> 60 * 2 ) {
$age_str
=
int
$age
/ 60;
$age_str
.=
" min ago"
;
}
elsif
(
$age
> 2 ) {
$age_str
=
int
$age
;
$age_str
.=
" sec ago"
;
}
else
{
$age_str
.=
" right now"
;
}
return
$age_str
;
}
sub
is_binary {
return
$_
[0] !~ /^[[:
print
:]]+$ (?: \s ^[[:
print
:]]+$ )?/mx;
}
S_IFINVALID
=> 0030000,
S_IFGITLINK
=> 0160000,
};
sub
S_ISGITLINK($) {
return
((
$_
[0] & S_IFMT) == S_IFGITLINK)
}
sub
mode_string {
my
$mode
=
shift
;
if
(S_ISGITLINK(
$mode
)) {
return
'm---------'
;
}
elsif
(S_ISDIR(
$mode
& S_IFMT)) {
return
'drwxr-xr-x'
;
}
elsif
($^O ne
'MSWin32'
and S_ISLNK(
$mode
)) {
return
'lrwxrwxrwx'
;
}
elsif
(S_ISREG(
$mode
)) {
if
(
$mode
& S_IXUSR) {
return
'-rwxr-xr-x'
;
}
else
{
return
'-rw-r--r--'
;
}
}
else
{
return
'----------'
;
}
}
1;