Your browser doesn't support the features required by impress.js, so you are presented with a simplified version of this presentation.
For the best experience please use the latest Chrome, Safari or Firefox browser.
use strict;
use warnings;
# &pow($x, $y) = $x ** $y を計算する関数
sub pow {
my ($left, $right) = @_;
return $left ** $right;
}
1;
use Test::More;
require_ok( 'sample.pl' ); # テストするスクリプト
# &pow(2, 3) = 2 ** 3 = 8になるか確かめるテスト
is( &pow(2, 3), 8, '&pow(2, 3) is 8');
# テストの終わりを示すお約束
done_testing;
.t
にして, t
ディレクトリに格納することが習慣となっています.
$ perl t/sample.t
ok 1 - require 'sample.pl';
ok 2 - &pow(2, 3) is 8
1..2
$ perl t/sample.t
ok 1 - require 'sample.pl';
not ok 2 - &pow(2, 3) is 8
# Failed test '&pow(2, 3) is 8'
# at t/sample.t line 5.
# got: '9'
# expected: '8'
1..2
# Looks like you failed 1 test of 2.
# 引数の$gotと$expectedをeqで比較して真かどうかテスト.
is( $got, $expected, $test_name );
# 引数の1つ目が真かどうかテスト.
ok( $got eq $expected, $test_name);
# 引数の$gotが正規表現のqr/expected/にマッチするかテスト.
like( $got, qr/expected/, $test_name );
# リファレンスである$gotと$expectedが同じ構造(内容)かテスト.
is_deeply( $got, $expected, $test_name );
$test_name
はテストの説明です.
# 引数の$gotと$expectedをneで比較して真かどうかテスト.
isnt( $got, $expected, $test_name );
# 引数の$gotが正規表現のqr/expected/にマッチしないかテスト.
unlike( $got, qr/expected/, $test_name );
# 引数の$gotと$expectedを演算子$opで比較して真かどうかテスト.
cmp_ok( $got, $op, $expected, $test_name );
# 例: $gotと$expectedを'&&'演算子で比較
cmp_ok( $got, '&&', $expected, $test_name );
$ git clone git://github.com/perl-entrance-org/perl-entrance-2012-08.git
でclone(ダウンロード)しましょう.$ sudo apt-get install git-core
でOKです.
#!/usr/bin/env perl
use utf8;
use strict;
use warnings;
binmode STDIN, ":encoding(UTF-8)";
binmode STDOUT, ":utf8";
binmode STDERR, ":utf8";
t/perl-entrance-08.t
がテストスクリプト, perl-entrance-08.pl
が回答用スクリプトです.perl-entrance-08.t
が全てOKになるはずです.t/sample.t
, sample.pl
は, 先程Test::Moreの説明で使ったスクリプトです.$ cpanm Mojolicious
でOKです.$ sudo cpan Mojolicious
でインストールできます.mojo version
を実行してPerlのバージョンやMojoliciousのバージョンが表示されればOKです.$ perl -Mojo -E 'a( { "text" => "Neko" } )->start;' daemon
を実行した後, ブラウザで127.0.0.1:3000
を開いて, Neco
と表示されればOKです.
use Mojolicious::Lite;
use utf8;
get '/' => sub {
my $self = shift;
$self->render(text => 'Hello, world!');
};
app->start;
hello.pl
という名前で保存して, $ morbo hello.pl
で実行してみましょう.127.0.0.1:3000
を開けば, Hello, world!
と表示されるはずです.
use Mojolicious::Lite;
use utf8;
Mojolicious::Lite
はMojolicious
のLite版... って, そのまんまですね.Mojolicious::Lite
は1つのスクリプトで複数のページを作成できます. 一方Mojolicious
は, 1ページ=1スクリプトで構成されます.Mojolicious::Lite
で作成した複数のページを, Mojolicious
の為に分割することも可能です.
use Mojolicious::Lite;
use utf8;
Mojolicious::Lite
はMojolicious
をインストールすれば同時にインストールされますので, 別にインストールする必要はありません.use Mojolicious::Lite;
をすれば, 自動的にuse warnings;
とuse strict;
が有効になります. わざわざ書く必要はありません.
get '/' => sub {
my $self = shift;
$self->render(text => 'Hello, world!');
};
get '/' => sub { ... };
は, getメソッドで'/'にアクセスした場合, subの中の...
の処理を行う, という意味です.my $self = shift;
は「お約束」と思っておいて下さい.
get '/' => sub {
my $self = shift;
$self->render(text => 'Hello, world!');
};
$self->render(text => 'Hello, world!');
で, 「textの形式で, 'hello, world!'と出力せよ!」という命令をしています.json => { x => 3 }
なら, json形式で{"x":3}
が出力されますし, text => 'Oops!', status => '410'
とすれば, ステータスコードを指定することもできます.
app->start;
Mojolicious::Lite
を使って, hello, mojolicious! my name is (あなたの名前)
と出力するスクリプトを書いて, 実行してみましょう.
__DATA__
@@ index.html.ep
<html>
<head><title><%= $title %></title></head>
<body style='padding: 30px;'>
<%= $string %>
</body>
</html>
hello.pl
の末尾に(app->start;
の後に), このようなテンプレートを用意します.template/index.html.ep
として保存することで適用されます.
get '/' => sub {
my $self = shift;
$self->stash(string => 'Hello, world!', title => 'hello');
$self->render();
} => 'index';
/
にアクセスした際の動作を記載する関数を, このように書き換えましょう.$self->stash
で, 先程記述したテンプレートにデータを渡すことができます.=> 'index';
と記載することで, 使用するテンプレートを指定できます.
__DATA__
@@ index.html.ep
<html>
<head><title><%= $title %></title></head>
<body style='padding: 30px;'>
<%= $string %>
</body>
</html>
<%= $title %>
はhello
に, <%= $string %>
は, Hello, world!
に置き換わります.<%= $xxx %>
は, テンプレートの中で使える変数だと思って下さい.
@@ profile.html.ep
<html>
<head><title><%= $name %>のプロフィール</title></head>
<body style='padding: 30px;'>
私の名前は<%= $name %>です.<br>
趣味は<%= $hobby %>で, 好きなプログラミング言語は<%= $language %>です.
</body>
</html>
name
, hobby
, language
を与え, あなたの自己紹介(プロフィール)ページを作ってみよう.app.pl
を編集していきます.app.pl
の中に用意してあります.name
が空になっているので, あなたの名前を入力してください.
get '/profile' => sub {
...
};
$app->start;
よりも上に, 次のようなコードを書きましょう.Use a spacebar or arrow keys to navigate