
% sudo perl -MCPAN -e 'install Task::Catalyst'
ブラウザで「http://localhost:3000/」にアクセスしてみる。ktkr!!!% catalyst.pl MyApp % cd MyApp % script/myapp_server.pl -r
% emacs lib/MyApp.pm (追加)
sub hello : Local {
   my ($self, $c) = @_;
   $c->response->output('Hello, World!');
}
ブラウザで「http://localhost:3000/hello」にアクセスし、
% script/myapp_create.pl controller Foo
% emacs lib/MyApp/Controller/Foo.pm (追加)
sub default : Private {
   my ( $self, $c ) = @_;
   $c->response->body('hello! /foo');
}
sub bar : Local {
   my ( $self, $c ) = @_;
   $c->response->body('hello! /foo/bar');
}
sub baz : Local {
   my ( $self, $c ) = @_;
   $c->response->body('hello! /foo/baz');
}
ブラウザで「http://localhost:3000/foo」% sudo perl -MCPAN -e 'install Catalyst::Helper' % sudo perl -MCPAN -e 'install Time::Piece'
% emacs myapp.yml (追加)
View::TT:
 INCLUDE_PATH:
   - 'root/templates'
 TEMPLATE_EXTENSION: '.tt'
% script/myapp_create.pl view TT TT
% emacs lib/MyApp.pm (修正)
use Time::Piece;
sub hello : Local {
   my ($self, $c) = @_;
   $c->stash(now => Time::Piece->new);
   $c->forward($c->view('TT'));
}
(※p.164のソースでは「use Time::Piece;」がない。)(※p.164のリスト4はheadタグが閉じられていない。)% mkdir root/templates % root/templates/hello.tt <html> <head><title>[% c.config.name %]</title></head> <body> <h1>[% c.config.name %]</h1> <p>Hello! [% now.year %]</p> </body> </html>
(※test通らなくても強引にインストールした。)% sudo perl -MCPAN -e 'install Catalyst::Helper::Model::CDBI' % sudo perl -MCPAN -e 'install Class::DBI' % sudo perl -MCPAN -e 'install Class::DBI::mysql' % sudo perl -MCPAN -e 'install DBD::mysql'
% mysql create database myapp; use myapp; create table entry ( id int unsigned auto_increment primary key, title varchar(255), body text, timestamp timestamp ); insert into entry values (NULL, 'Hello','This is a pen.', NOW()); insert into entry values (NULL, 'Bye','Sayonara!', NOW()); insert into entry values (NULL, 'Oreore','Ore dayo ore!', NOW());
% script/myapp_create.pl model CDBI CDBI dbi:mysql:myapp root
% emacs myapp.yml (追加)
Model::CDBI:
 dsn: 'dbi:mysql:dbname=myapp'
 password: ''
 user: 'root'
% emacs lib/MyApp.pm (書き換え)
sub hello : Local {
   my ($self, $c) = @_;
   my $entries = MyApp::Model::CDBI::Entry->retrieve_all;
   $c->stash(entries => $entries);
   $c->stash(now => Time::Piece->new);
   $c->forward($c->view('TT'));
}
(※タイポ:p.165のソースの「my $entres」→「my $entries」。ブラウザで「http://localhost:3000/hello」にアクセスする。% root/templates/hello.tt (追加) <dl> [% WHILE (entry = entries.next) %] <dt>[% entry.title %]</dt> <dd>[% entry.body %]</dd> [% END %] </dl>
その2)Can't locate object method "set_sql" とエラーがでる同じ現象が起こったので drk7 さんのように、
#!/usr/bin/perl
use strict;
use warnings;
use SUFARY;
my $fn = shift @ARGV;
my $suf = SUFARY->new($fn);
my $asz = $suf->{'arraysize'};  # 配列の大きさ
my $tsz = $suf->{'textsize'};   # テキストの長さ
my %longest = (len => 0, posi => -1); # 結果が入る
my $pre_posi = -1;
for (my $i = 0; $i < $asz; $i++) {
   my $posi = $suf->get_position($i);
   if ($pre_posi != -1) {
       my $common = compare_suffixies($suf, $pre_posi, $posi);
       if ($common > $longest{len}) {
           $longest{len} = $common;
           $longest{posi} = $pre_posi;
       }
   }
   $pre_posi = $posi;
}
printf "%s (%d)\n",
   $suf->get_string($longest{posi}, $longest{len}),
   $longest{len};
# 二つのsuffixを比較し先頭から何文字共通かを返す
sub compare_suffixies {
   my ($suf, $p1, $p2) = @_;
   my $len = 0;
   for (; $len + $p1 < $tsz and $len + $p2 < $tsz; $len++) {
       if ($suf->get_string($p1 + $len, 1) ne
           $suf->get_string($p2 + $len, 1)) {
           last;
       }
   }
   return $len;
}
ソートされた文字列を上から順番に取り出し、直前の文字列とつきあわせ最長の繰り返し文字列は「ACAGCTC」で、7文字でした。% cat aaa ACGTTTCGACACAGCTCTAGACAGCTCCCCCCTAGACACCCAAAAAGAGAGAGATTTTGGGAGAGAG % mkary -q aaa % longest_repetition.pl aaa ACAGCTC (7)