printerbannerでかめはめ波(perlの反復演算子)

kamehameha

『ドラゴンボール超(スーパー)』
ドラゴンボールは誰もがハマって何度も再放送を見て、内容忘れたころにまた見てを繰り返し、そろそろ見尽くすして飽きてきた感イメージなのですが、やはり、続きがあると知ると見てしまいますしやっぱり面白いです。
「魔人ブウ編」後のお話なのですが、序盤はバトルがないので、私的には落ち着いて見られます。バトル物なのに、戦闘場面以外を好んで見るんですよね。時々出てる弁当とか、レストランの料理が美味しそうです。そういえば悟空たちは大食いだったんですね。美味しい料理をたくさん食べられて羨ましいです。

何気なくprinterbannerを使っていたら、横に倒れた!の記号が、カメハメ波に見えてきたので、カメハメ波バナーを作りたくなりました。
今回はカメハメ波を動かすために、 perlの反復演算子xを使います。xの使い方ですが、まずは、スカラー変数の場合。

~$ perl -e '$a=5x10; print "$a\n"'
5555555555
~$ perl -e '$a="A" x 10; print "$a\n"'
AAAAAAAAAA

スカラー変数であれば、指定した数だけリピートした文字列が生成されます。

配列変数でxを使うと指定数の配列が出来上がります。

~$ perl -e '@a=(5) x 10; print "@a\n"'
5 5 5 5 5 5 5 5 5 5
~$ 

以下は、反復演算子を使ってbannerコマンド表示を3倍に増幅する例です。

~$ banner HELLO | perl -ne '$a.=$_;END{print $a x 3}'
#     # ####### #       #       #######
#     # #       #       #       #     #
#     # #       #       #       #     #
####### #####   #       #       #     #
#     # #       #       #       #     #
#     # #       #       #       #     #
#     # ####### ####### ####### #######

#     # ####### #       #       #######
#     # #       #       #       #     #
#     # #       #       #       #     #
####### #####   #       #       #     #
#     # #       #       #       #     #
#     # #       #       #       #     #
#     # ####### ####### ####### #######

#     # ####### #       #       #######
#     # #       #       #       #     #
#     # #       #       #       #     #
####### #####   #       #       #     #
#     # #       #       #       #     #
#     # #       #       #       #     #
#     # ####### ####### ####### #######

~$ 

では、かめはめ波を撃ってみましょう。図で表すほどでもないのですが、下図のような理屈になります。
kamehameha-diagram

printerbannerの表示一回毎に、sleepで停止させています。1秒では長すぎるので、0.1秒を指定していますが、1秒未満のsleepをするには、Debianではsleepenhで実行します。

                                                                                                              
~$ for i in `seq 130`;do clear;
> printerbanner ! | perl -pe "\$s=' 'x$i;s/^.{30}(.{20})/\$1\$s/;";
> sleepenh 0.1;done

上記を実行すると、冒頭画像のコンソールかめはめ波が見られます。画面を広く使うので、フォントを小さくする必要があります。

2 responses to “printerbannerでかめはめ波(perlの反復演算子)

  1. Det värsta är att precis som nÃ¥gon ovanstÃ¥ende skrev, avsaknad av självcensur och självinsikt. Ingen har sagt &#p&20;sto8p2#8221; eller “vänta lite”. Har man aldrig reflekterad över vad man hÃ¥ller pÃ¥ med? samt… reflekterar ingen över vad som just nu sker när allt vände 180 grader.?

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA