+sub mindate
+{
+ my $t = shift;
+ my $out;
+
+ if ($main::system-$t < 86400 ) {
+ $out = ahour($t);
+ } elsif ($main::system-$t < 365*86400) {
+ $out = adate($t);
+ chop $out for (1..4);
+ $out .= ' ' . atime($t);
+ chop $out for (1..3);
+ } else {
+ $out = atime($t);
+ $out =~ s/\@/ /;
+ }
+ return $out;
+}
+
+# like phash but prints dates and times
+sub piplist
+{
+ my $ref = shift;
+ my $out;
+
+ return $ref unless ref $ref;
+
+ while (my ($k,$v) = each %$ref) {
+ if (ref $v eq 'HASH') {
+ $out .= piplist($v);
+ } elsif (ref $v eq 'ARRAY') {
+ $out .= join(',', map { sprintf "$_->[0]@%s", mindate($_->[1]) } ref $v->[0] eq 'ARRAY' ? @$v : $v);
+ } else {
+ $out .= $v;
+ }
+ }
+ $out =~ s/,+$//; # remove last comma
+ return $out;
+}
+