flist.pl

30分プログラム、その41。id:mzp:20070502:flistのPerl/はてな記法版。

id:mzp:19000101:listにいままでの一覧を作りました。

$ perl croquis_list.pl ~/hatena/*.txt

*list*[30分プログラム]30分プログラムリスト
**Perl
- [http://d.hatena.ne.jp/mzp/20070416/rpn:title]
- [http://d.hatena.ne.jp/mzp/20070419/fortune:title]
- [http://d.hatena.ne.jp/mzp/20070425/lcs:title]
.....
** Ruby
.....
.....
#!/usr/bin/env perl
use strict;
use warnings;
use utf8;
use Encode;
  
print "\n";
print encode("UTF-8","*list*[30分プログラム]30分プログラムリスト\n");
 
my @titles = map {
    open(FILE,$_);
    /(\d{4})-(\d{2})-(\d{2})\.txt$/ or die "filename is invalid";
    my $date = "$1$2$3";
    my @titles = grep {/\*.*\[30/ } <FILE>;
    close(FILE);
    map { [$date ,$_] } @titles;
} @ARGV;
 
for my $lang (qw(Perl Python Ruby Scheme)){
    print "**$lang\n";
    for (grep { $_->[1] =~ /$lang/i} @titles){
	if($_->[1] =~ /^\*(\w+)\*/){
	    print "- [http://d.hatena.ne.jp/mzp/$_->[0]/$1:title]\n"
	}
    }
}
  • いったんリストに貯め込んで、あとで言語ごとに出力してる。やっぱり一々出力するよりこっちのほうがいいよね
  • Perlだから、二重mapをしてもフラットなリストが作れる。今回はこっちのほうがありがたい
  • アップロード用スクリプトに組み込んでおこう