鈍足ランナーのIT日記

走るのが好きな5流のITエンジニアのブログ。

趣味の範囲は広いけど、どれも中途半端なクソブロガー楽しめるWebアプリを作ってあっと言わせたい。サーバーサイドPerl(Mojolicious)、クライアントサイドVue.js。Arduinoにも触手を伸ばす予定。

Acme::Kensiroで「あたたたたたたたたたたたああたたたたたたたたたたたたたたたたた」と言わせたい

Acme::Kensiroモジュールをつかって、あた・・・・・・・・と叫ばせようと おもって、以下のようにつかってみた。test.pl

use strict;
use warnings;
use Acme::Kensiro;

print kensiro(1600);

でも、引数に設定できるのは、255までなんです。

$ perl test.pl
Character in 'C' format wrapped in pack 
at /usr/lib/perl5/site_perl/5.14/Acme/Kensiro.pm line 14.
あたたたたたた

ソースを呼んでみると packという関数を用いて、8ビットの値をバイナリにして、2進数に変換しています。

package Acme::Kensiro;
use strict;
use warnings;
use Exporter 'import';
our @EXPORT = 'kensiro';

our $VERSION = '0.14';

use 5.008001;

sub kensiro {
    my $src = shift;

    my $dst = unpack("B8",  pack("C", $src));
    $dst =~ s/^0*(.+)/$1/;
    $dst =~ s/0//g;
    $dst =~ s/1//g;

    return $dst;
}

1;
__END__

そこでソースをローカルディレクトリにもってきて

$ perldoc -l Acme::Kensiro
/usr/lib/perl5/site_perl/5.14/Acme/Kensiro.pm

$ mkdir -p ./lib/Acme
$ cp /usr/lib/perl5/site_perl/5.14/Acme/Kensiro.pm ./lib/Acme

下記のように修正して

package Acme::Kensiro;
use strict;
use warnings;
use Exporter 'import';
our @EXPORT = 'kensiro';

our $VERSION = '0.14';

use 5.008001;

sub kensiro {
    my $src = shift;

    my $dst = unpack("B32",  pack("L", $src));
    $dst =~ s/^0*(.+)/$1/;
    $dst =~ s/0//g;
    $dst =~ s/1//g;

    return $dst;
}

1;
__END__

今度は、こんな感じにうまく実行できました!

$ perl -Ilib test.pl
あたたたたたたたたたたたああたたたたたたたたたたたたたたたたた

取り込んでもらうように、報告しなきゃ。