File Coverage

blib/lib/Acme/Matrix.pm
Criterion Covered Total %
statement 15 42 35.7
branch 0 10 0.0
condition 0 7 0.0
subroutine 5 7 71.4
pod 0 2 0.0
total 20 68 29.4


line stmt bran cond sub pod time code
1             package Acme::Matrix;
2             our $VERSION = '0.09';
3 1     1   129283 use 5.006; use strict; use warnings;
  1     1   4  
  1     1   14  
  1         2  
  1         37  
  1         5  
  1         2  
  1         64  
4 1     1   638 use Term::ReadKey;
  1         2904  
  1         439  
5              
6             our (@WORDS, @CHARS, @COLOURS);
7             BEGIN {
8 1     1   16 $SIG{INT} = \&shutdown;
9 1         51 @WORDS = (
10             [qw/し ゅ く う ん/],
11             [qw/不 正 直/],
12             [qw/き い っ ぽ ん/],
13             [qw/憎 し み を 抱 く/],
14             [qw/だ ら く ふ は い/],
15             [qw/ふ と ど き/],
16             [qw/は ち ゃ め ち ゃ/],
17             [qw/た い ぎ ゃ く ひ ど う/],
18             [qw/ラ ッ キ ー/],
19             [qw/し り が お も い/],
20             [qw/リ ス ペ ク ト/],
21             [qw/ム ー ン/],
22             [qw/に っ て ん/],
23             [qw/か み の み こ と/],
24             [qw/と く し ょ く/],
25             [qw/ス キ ャ ン ダ ラ ス/],
26             [qw/ぜ に か ね/],
27             [qw/エ ク ス プ ロ イ テ ー シ ョ ン/],
28             [qw/た く さ ん/],
29             [qw/マ イ ン ド/],
30             [qw/味 が 分 か る/],
31             [qw/に お い が す る/],
32             [qw/感 じ て/],
33             [qw/リ ッ ス ン/],
34             [qw/風 に た な び く/],
35             [qw/シ ー ク レ ッ ト/],
36             [qw/こ う ざ か か り/],
37             [qw/じ つ ご と/],
38             [qw/シ ー カ ー/],
39             [qw/イ マ ジ ネ ー シ ョ ン/]
40             );
41 1         22 @CHARS = qw/
42             あ い う え お か き く け こ さ し す せ そ た ち つ て と
43             な に ぬ ね の は ひ ふ へ ほ ま み む め も ら り る れ ろ
44             ア イ ウ エ オ カ キ ク ケ コ ガ ギ グ ゲ ゴ サ シ ス セ ソ
45             ザ ジ ズ ゼ ゾ タ チ ツ テ ト ダ ヂ ヅ デ ド ナ ニ ヌ ネ ノ
46             ハ ヒ フ ヘ ホ バ ビ ブ ベ ボ パ ピ プ ペ ポ マ ミ ム メ モ
47             /;
48 1         587 @COLOURS = ( 28, 34, 35, 40, 41, 46, 47, 48, 48, 82, 83, 0 );
49             }
50              
51              
52             sub start {
53 0     0 0   my ($pkg, %args) = @_;
54 0 0         @WORDS = @{$args{words}} if ($args{words});
  0            
55 0 0         @CHARS = @{$args{chars}} if ($args{chars});
  0            
56 0 0         my $delay = $args{delay} ? $args{delay} / 1000 : 0.01;
57 0   0       my $space = " " x ($args{spacing} || 2);
58 0           my ($wchar, $hchar) = GetTerminalSize();
59 0   0       $wchar = $wchar * (0.99 / ($args{spacing} || 2));
60             my %word_lines = (
61 0           map { $_ => [] } 0 .. $wchar
  0            
62             );
63 0           print "\033[1J";
64 0           print "\033[48;5;232m";
65 0           while (1) {
66 0           for (0..$wchar) {
67 0 0         if (int(rand(5) + 0.5) > 4) {
68 0           my $i = 0;
69 0           push @{$word_lines{$_}}, (int(rand(1) + 0.5))
70             ? sprintf("\033[38;5;%sm%s", $COLOURS[int(rand(scalar @COLOURS))], $CHARS[int(rand(scalar @CHARS))])
71 0 0         : map { sprintf("\033[38;5;%sm%s", $COLOURS[$i++], $_) } @{ $WORDS[int(rand(scalar @WORDS))] }, $space;
  0            
  0            
72             }
73 0   0       print shift(@{$word_lines{$_}}) || $space;
74             }
75 0           print "\n";
76 0           select(undef, undef, undef, $delay);
77             }
78             }
79              
80             sub shutdown {
81 0     0 0   print "\033[0m";
82 0           print "\033c";
83 0           exit;
84             }
85              
86             __END__