1.の続き
bio の題材で、塩基配列を reverse-complement をするだけの Web Appli を作成。
編集
前回の状態の app.psgi を元にして。
$ cp app.psgi app.psgi.bak
# editing...
$ diff app.psgi.bak app.psgi
18,19c18,26
< my $c = shift;
< return $c->render('index.tx');
---
> my $c = shift;
> my $data ;
> my $seq = $c->req->param('seq') || '';
> {
> last if $seq =~ /[^ACGTN\r\n]/i ;
> $seq =~ s/[\r\n]//g ;
> ( $data = reverse $seq ) =~ tr/ACGTacgt/TGCAtgca/ ;
> }
> return $c->render('index.tx', { data => $data });
30,32c37,39
< <header><h1>Example</h1></header>
< This is a Example
< <footer>Powered by <a href="http://amon.64p.org/">Amon2::Lite</a></footer>
---
> <form method="get" action="/">
> <textarea name="seq" rows="4"><: $data || 'input sequence' :></textarea><br>
> <input type="submit" value="submit" /></br>
この状態に。
index.tx
---
> <form method="get" action="/">
> <textarea name="seq" rows="4"><: $data || 'input sequence' :></textarea><br>
> <input type="submit" value="submit" /></br>
-
<body>
の中身を、がさっと、テキストエリアの記載に差し替え。-
form
は、action
を/
にしといて、煩雑にならないコードに。例なので。
-
- テキストエリアには、デフォルト値 'input sequence' と、結果の戻り値が収められる、 $data をセット。
-
<: :>
がKolon
の記載方法。この場合は変数の展開。-
||
は perl と同じくor
-
-
perl コード部分
このケースだと get で十分なので、 get '/'
のまま。
---
> my $data ;
> my $seq = $c->req->param('seq') || '';
> {
> last if $seq =~ /[^ACGTN\r\n]/i ;
> $seq =~ s/[\r\n]//g ;
> ( $data = reverse $seq ) =~ tr/ACGTacgt/TGCAtgca/ ;
> }
> return $c->render('index.tx', { data => $data });
-
$c->req->param('seq')
で戻り値を$seq
にセット。- 戻り値が塩基配列でなければ、
$data
には何もセットされない。 - 塩基配列だったら、 reverseq-complement して、
$data
にセット。
- 戻り値が塩基配列でなければ、
- テンプレート側の変数
data
に perl 側の$data
をセットするために、リファレンスを渡す。
app.psgi
今回の app.psgi の全コード。
非常に単純
app.psgi#3
use strict;
use warnings;
use Amon2::Lite;
sub load_config {
+{
'Text::Xslate' => +{
syntax => 'Kolon',
suffix => '.tx',
module => undef,
cache => 0,
},
}
}
get '/' => sub {
my $c = shift;
my $data ;
my $seq = $c->req->param('seq') || '';
{
last if $seq =~ /[^ACGTN\r\n]/i ;
$seq =~ s/[\r\n]//g ;
( $data = reverse $seq ) =~ tr/ACGTacgt/TGCAtgca/ ;
}
return $c->render('index.tx', { data => $data });
};
__PACKAGE__->to_app(handle_static => 1);
__DATA__
@@ index.tx
<!doctype html>
<html>
<body>
<form method="get" action="/">
<textarea name="seq" rows="4"><: $data || 'input sequence' :></textarea><br>
<input type="submit" value="submit" /></br>
</body>
</html>
ブラウザをリロード1すると、塩基配列を受け取るフォームが表われる。後は、塩基を投げるだけ。
-
plackup -r
してる前提。 ↩