% sudo perl -MCPAN -e 'install Task::Catalyst'
ブラウザで「http://localhost:3000/」にアクセスしてみる。ktkr!!!% catalyst.pl MyApp % cd MyApp % script/myapp_server.pl -r
ブラウザで「http://localhost:3000/hello」にアクセスし、% emacs lib/MyApp.pm (追加) sub hello : Local { my ($self, $c) = @_; $c->response->output('Hello, World!'); }
ブラウザで「http://localhost:3000/foo」% 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'); }
% sudo perl -MCPAN -e 'install Catalyst::Helper' % sudo perl -MCPAN -e 'install Time::Piece'
(※p.164のソースでは「use 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のリスト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());
(※タイポ:p.165のソースの「my $entres」→「my $entries」。% 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')); }
ブラウザで「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)