「とほほ」さんのgif画像連結ライブラリを使ってカウンタを作成中、行き詰ってしまいました。
下のスクリプトはあるサイトで配布されているカウンタのスクリプトの一部です。
1 while (length($count) < $fig) { $count = '0' . $count; }
2 $length = length($count);
3 @GIF=();
4 foreach (0 .. $length-1) {
5 $n = substr($count,$_,1);
6 push(@GIF, "$imgdir/$n\.gif");
7 }
8
9 print "Content-type: image/gif\n\n";
10 binmode(STDOUT);
11 print &gifcat'gifcat(@GIF);
* $figはカウンタ表示桁数です。
* $imgdirはカウンタ画像のディレクトリです。
このスクリプトを組み込んだらうまいことカウンタを表示することができました。
でもスクリプトの理解ができず悩んでいます。
お暇がありましたらぜひ教えてください。
No.1ベストアンサー
- 回答日時:
1行目は、カウント値が桁数に満たない数値の場合「0」で埋めるってこと。
つまり、4桁と指定しておいてカウント値が3であれば、
$countは0003となります。
2行目はカウンタの桁の取得。
4と決まっているように見えてもカウンタ値が進めば、45233なんて5桁になりますからね。
3行目は配列GIFをリセット。
4行目からは、桁数の数だけ繰り返しを行い、
先頭の数値から順番に配列に入れていく。
これは、gifcatの方で使うため。
つまりgifcatで連結するためにどの画像かということを用意している。
9行目からは、GIFファイルとして出力するためのヘッダ。//text/plainとかと同じようなもの。
10行目はWindowsサーバの場合はこうする必要がある。
11行目はgifcatの連結処理を使って連結したものを出力ってこと。
それぞれの関数などは、とほほのWWW入門さんのPerlのリファレンスを見ると良いでしょう。
ご回答ありがとうございます。
おかげで大まかな流れをつかむことができました。
4行目以降のブロックも、いろいろとwebをめぐって理解することができました。
ありがとうございました。
No.2
- 回答日時:
まとめてしまえば、次の3つのことをおこなっています。
・指定桁数より短い数字なら0を追加。ex.44->00044
・数字一つ一つを区切って、ファイルアドレスの列に。
00044 -> 0.gif 0.gif 0.gif 4.gif 4.gif
・そのアドレスの列をgifcatに渡して連結。
(11行目で渡す部分までですね)
おおまかな流れが押さえられれば、
あとは自分なりに同じ事を実現できるように書ければ問題ないと思いますよ。
多かれ少なかれ人の書いたソースは読みにくいものですから、
無理に完全に理解しようとすることも無いと思います。
正直、コーディングがわかりにくい気がしますけれど(苦笑)
(あくまで私個人の主観ですのでこれもお気になさらずに・・)
whileループで0を埋めて、後から長さを取得するより、
長さを取って、足りない分を埋める方がわかりやすい気がします。
#5桁以上
my $length = length($count);
$count = '0' x (5-$length) . $count;
foreachよりfor文使う方が素直な気がしますし、
そもそも、foreachとsubstr使わずに、splitする場面のような気がします。
(splitすると@gifにpushしにくいということなんでしょうか・・)
結局の所、前半は面倒なことをしなくてもsprintfの用法そのままですし、
全部まとめて一文で書けてしまうのですが。
(コード読みやすくするためにわけることには賛成です)
my @gif = map {"$_.gif"} split //, sprintf("%0$fig\d",$count);
#蛇足部分が長くなりましたm(_ _)m
ご回答ありがとうございました。
>多かれ少なかれ人の書いたソースは読みにくいものですから、
>無理に完全に理解しようとすることも無いと思います。
初心者である私にとって参考になるご意見でした。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP imageフォルダに、画像をリサイズして保存する時のファイル名を変更したい 1 2023/05/30 11:39
- PHP ランキングを表示する際の画像の大きさを固定することは可能でしょうか? <?php if ( has_ 1 2022/07/21 14:55
- 工学 【至急】非同期式10進カウンタの4入力NANDのA,C入力配線を外しても同じく10進で動作するか 2 2022/09/30 03:05
- PHP PHP ページング データベース 1 2022/06/16 10:30
- その他(コンピューター・テクノロジー) 量子コンピュータの動作原理がわかりません。同じビットが、1でも0でも有って良いだろうか? 3 2023/02/04 03:20
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- ノートパソコン gifアニメ―ションを動画(mp4でOK)にしたい 1 2022/08/14 09:51
- Ameba(アメーバブログ) アメブロは、HTMLのタグの入力を許さないブログ・サイトですか? 1 2023/06/18 18:48
- ホームページ作成・プログラミング アメーバ・ブログは"HTMLタグ"を許可してないのですか? 2 2023/06/17 21:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
perlをバージョンアップしたら...
-
INDIRECT 横に再度抽出したい
-
Strawberry Perl for Windows ...
-
openした後、closeしないでプロ...
-
テキストファイルで提出とは?
-
Perlのエラーについてご教授く...
-
perlのrequireの動き方について...
-
Perl の外部モジュールの利用方法
-
Windows10においての『Perl』の...
-
Perlで特定文字列から特定文字...
-
Perlでsprintf("%02d",$month)...
-
フローチャート 九九
-
perl LWPでURLにアクセスした時...
-
Perlで、「が」を、「...
-
アルファベットに付いて質問し...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
ファイルアイコンの左下に緑の□...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ディレクトリのファイル数取得
-
CGIでhtmlを作成するもブラウザ...
-
パールの-pオプションの値0777...
-
Perlを使って、大文字小文字関...
-
Locationで最新の情報に更新さ...
-
perl localhostでgifを表示する...
-
SUN BBSの改造方法
-
ラジオボタンが両方とも選択で...
-
「value」に2つの値をセットす...
-
WEBページを強制的に横画面で見...
-
select値をhiddenのvalueに渡し...
-
チェックボックスの返す値
-
INPUT TYPE
-
wordの数式について 定積分を書...
-
FORMのselectの選択肢を最初か...
-
[HTML]プルダウンメニューの横...
-
VB.net データーグリッドビュー...
-
postデータのあるページの再表示
-
チェックボックスとセレクトボ...
-
別formのhidden項目を自form値...
おすすめ情報