First thing I need to do is make sure that the required elements of a post are available when I need to make a blog post. This is a first-pass that’s sitting in ~/local/bin, not the bin directory shared everywhere, so, in a more ‘real’ program, I’d have a .pages.cnf or the like where the default directory could be machine-specific, as well as the time zone.

But, as a first pass, I’m happy with this.

I am especially happy that, with newer perls, postderef is available, which allows me to both create and use arrayrefs like $arrayref->@* instead of @{$arrayref}. A character longer, but uglier, I think.

#!/usr/bin/env perl


use feature qw{ say postderef } ;
use strict ;
use warnings ;
use utf8 ;

use IO::Interactive qw{interactive} ;
use DateTime ;
use JSON ;
use Getopt::Long ;

my $json = JSON->new->canonical->pretty ;
my $post_dir = '/home/jacoby/localdev/jacoby.github.io/_posts' ;
my $options ;
my $fmt = '%F %T %z' ;
GetOptions(
'title=s' => \$options->{ title },
'categories=s' => \$options->{ categories }->@*,
) ;
my $now = DateTime->now()->set_time_zone( 'America/New_York' ) ;
$options->{ date } = $now->strftime( $fmt ) ;

my $categories = join ' ', sort $options->{ categories }->@* ;

my $file = lc( join '-', $now->ymd(), split m{\s+}, $options->{ title } ) . '.markdown' ;

my $path = join '/', $post_dir, $file ;

unless ( -f $path ) {
if ( open my $fh, '>', $path ) {
say $fh <<"TEST";
---
layout: post
title: "$options->{title}""
date: "
$options->{date}"
categories: $categories
---

TEST

}
}
exit;