1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Amon2::Lite おさらい 2. 簡単な Web Appli

Last updated at Posted at 2015-09-11

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すると、塩基配列を受け取るフォームが表われる。後は、塩基を投げるだけ。

  1. plackup -r してる前提。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?