どう書く?org に投稿したコードをコピーする

数年前、Rの勉強を兼ねてどう書く?orgに色々とコードを投稿していたのをこっちに纏めることにしました。
今までは参照したい時に直接見に行っていたのですが、いつからか言語別ページユーザー別ページもエラーになってしまうので困ったなーと思っていたのです。こっちに写しておけば検索もしやすいし使いすいしね。
意外とたくさん投稿していたらしく、手動でやりきれなかったのでスクリプトにしてみました。コメント欄の扱いがちょっと難しくて、とりあえずHTML::FormatTextでざっくりと整形しています。

自分のコードはともかく、お題部分も丸々コピーしてしまったので、もしかしたら問題があるかもしれません。問題であれば消します。

use strict;
use warnings;
use URI;
use URI::http;
use Web::Scraper;
use HTML::FormatText;

use utf8;
binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";

my $topic_uri = "http://ja.doukaku.org/topic/";

print STDERR "scraping $topic_uri\n";
my $topics = scraper{
  process 'ul.topic_list li', 'list[]' => scraper{
    process 'a', 'uri'   => '@href';
    process 'a', 'title' => 'TEXT';
  };
  result 'list';
}->scrape(URI->new($topic_uri));

### $topics
sleep 1;

my $N = @$topics;
my $i = 0;
foreach my $t (@$topics){
  print STDERR sprintf("%02d/%02d scraping %s : %s\n", ++$i, $N, $t->{uri}, $t->{title});
  
  my $already_found = 0;
  my $comments = scraper{
    process 'div.comment', 'c[]' => scraper{
      process 'a', 'name[]' => 'TEXT';
      process 'div.comment_body', 'cmt[]' => sub { HTML::FormatText->new(leftmargin => 1)->format($_); }; # set leftmargin=1 to avoid hatena-style syntax
      process 'td.code', 'code' => ['TEXT', sub { s/\x0D\x0A|\x0D|\x0A/\n/g; $_ }]; # cf. http://www.din.or.jp/~ohzaki/perl.htm#CRLF_Unify
    };
    result 'c';
  }->scrape(new URI($t->{uri} . 'lang/r/'));
  ### $comments
  
  foreach my $c (@$comments){
    ### $c
    if($c->{name}->[0] eq 'kkobayashi'){
      if($already_found == 0){
        print "\n\n*[R][doukaku.org]どう書く?org : $t->{title}\n";
        print "original page : $t->{uri}\n";
        print ">>\n";
        print join("\n", @{$comments->[0]->{cmt}});
        print "<<\n";
        print ">||\n" . $comments->[0]->{code} . "||<\n" if exists $comments->[0]->{code};
        $already_found = 1;
      }
      my $cmtn = substr($c->{name}->[1], 1); # chop the first '#';
      print "\n\n**$c->{name}->[1]\n";
      print "original page : http://ja.doukaku.org/comment/$cmtn/\n";
      print ">>\n";
      print join("\n", @{$c->{cmt}});
      print "<<\n";
      print ">|r|\n" . $c->{code} . "||<\n";
    }
  }
  sleep 1;
}