30分プログラム自動生成

30分プログラム、その180。30分プログラムのためのファイルを自動生成するようにした。

毎回、数をカウントしていくのは面倒。今までは、日付から計算していたけれど、これだと一日休むと計算式を修正しなくちゃいけない。
そこで、「180-croquis_file.pl」のようにファイル名の先頭に何回目かを埋め込むようにした。そして、今のディレクトリ内にあるファイルを元に次のファイルを生成できるようにした。

これにあわせて、日記ジェネレータ(id:mzp:20070728:croquis)のほうも改造しておいた。

使い方

# 今、2個ファイルがある
$ ls
1-foo.pl 2-bar.rb

# 3つめを生成する
$ croquis_file baz.py

# 3-baz.pyが自動生成される(中身は空)
$ ls
1-foo.pl 2-bar.rb 3-baz.py

ソースコード

#! /usr/bin/perl
# -*- mode:perl; coding:utf-8 -*-
#
# croquis_file.pl -
#
# Copyright(C) 2007 by mzp
# Author: MIZUNO Hiroki
# http://mzp.sakura.ne.jp/
#
# Timestamp: 2007/11/11 22:23:00
#
# This program is free software; you can redistribute it and/or
# modify it under the same terms as Perl itself.
#
use strict;
use warnings;
use File::Basename;
use List::Util qw(max);

# 新規ファイル名
my $new_file_name = shift @ARGV;

# ファイル名は、<数字>-hoge.plのような形式をしていると仮定する。
# その中から最大のものを探す
my @files = @ARGV ? @ARGV : glob('*');
my $current = max map { basename($_) =~ /\A(\d+)-/ ? $1 : 0; } @files;

# 新しいファイルを作る
my $next = $current+1;
system "touch $next-$new_file_name"

参考