さまざまなジョークモジュール
ここでは,
Acme::Tests──テストする側からテストされる側に
通常,
図2のように次々と問題が出題され,
図2 Acme::Testsの実行
$ cpanm --look Acme::Tests
Acme-Tests-0.03.tar.gz が展開されてディレクトリを移動します
$ perl Makefile.PL
$ make test
Who plays on slashdot.org ?
(1) Cowboy Neal
(1) Cowboy Neal
(1) Cowboy Neal
(1) Cowboy Neal
==> 1
Who Invents Perl ?
(1) Larry Nelson
(2) Larry Wall
(3) Larry King
(4) Some guy with "Perl" in his name
==> 2
2 + 2 = ?
==> 4
Who writes Acme.pm ?
(1) acme
(2) spoon
(3) ingy
(4) all of them
==> 1
Verifing your answer...
t/00.simple.t .. 1/?
# Failed test at t/00.simple.t line 18.
# Looks like you failed 1 test of 4.
t/00.simple.t .. Dubious, test returned 1 (wstat 256,
0x100)
Failed 1/4 subtests
テストを自作してみる
すばらしいことに,
Acme::Testsをuseして,__
行以降に問題文,----
)
リスト2 自作のテスト出題モジュール
package MyTests;
use strict;
use Acme::Tests -Base;
our $VERSION = '1.00';
__DATA__
コミックマーケット84 の3 日目は何曜日?
(1) 金曜日
(2) 土曜日
(3) 日曜日
(4) 月曜日
Ans: 4
----
今回,
リスト3 自作のテスト出題モジュール
use strict;
use MyTests;
use Test::More;
my $t = MyTests->new;
my (@questions, @answers);
while (my $q = $t->next_question) {
print STDERR "\b\n$q\n==> ";
my $ans = <>;
push @questions,$q;
push @answers,$ans;
}
print STDERR " 結果は...\n";
for (0..$#questions) {
ok( $t->is_correct($questions[$_],$answers[$_]) )
}
done_testing;
$ prove t/mytest.t
コミックマーケット84 の3 日目は何曜日?
(1) 金曜日
(2) 土曜日
(3) 日曜日
(4) 月曜日
==>
ちゃんとテストが出題されました。とても楽しいですね!
Acme::Addslashes── PHPのあの関数を導入してみる
ところで,
リスト4を実行すると,
リスト4 Perlでaddslases?
use 5.012;
use strict;
use Acme::Addslashes qw(addslashes);
my $unsafe_str = "evil code";
my $slashed_str = addslashes( $unsafe_str );
say $slashed_str;
$ perl addslases.pl
- 注2)
- 文字の上に被るスラッシュはUnicodeのcombining long solidusoverlay
(U+0337) を利用しています。ですので実行環境, 表示フォントによっては正しく表示されないことがあります。