|
|
- #!/usr/bin/env perl
-
- use strict;
- use warnings;
-
- use 5.10.0;
- use POSIX qw(strftime);
- use File::Basename;
-
- my $root;
- if (defined $ENV{P1K3_ROOT}) {
- $root = $ENV{P1K3_ROOT} . '/archives';
- } else {
- # Fall back to a default:
- $root = $ENV{HOME} . '/workspace/p1k3/archives';
- }
-
- # I used to think strftime didn't have a non-zero-padded month/day;
- # it turns out you can do this with a - after the % (this may not
- # work everywhere, so my original workaround is commented below):
-
- my $dayfile = strftime("%Y/%-m/%-e", localtime());
-
- # $dayfile =~ s{/[0 ]}{/}gx;
- #
- # (Or: Use it anyway and apply an ad-hoc regex fix, because though we often
- # feel we know better in this day and age, we are not ashamed of text
- # transformation. not when the chips are down. text is the most powerful
- # computational abstraction i've ever come close to understanding, if i'm
- # honest, and past a certain point life is too short and too precious a span to
- # abandon the only tools you have ready to hand.)
-
- my $today = "$root/$dayfile";
-
- if (-d $today) {
- print $today;
- } else {
- my $dirname = $today;
-
- until (-d ($dirname)) {
- # If a dir for the month or year doesn't exist, this moves one step up.
- # Should land in archives/ if no year.
- $dirname = dirname($dirname);
- }
- print $dirname;
- }
|