Perl

5.8.8にしたら・・・

Perlのバージョンが5.6.1だったのでUPしたら良くなると思って5.8.8に上げました。 環境は同じように"Perlis.dll"を使ってCGIを動かしてみたら、 さっきまで動いてたものまで動かなくナリマシタ・・・。 今日試してみたらちゃんと動いてた。 再起動したらよくな…

HTML::Converter

wiki記法の変換モジュールをいろいろ探してるのだが、 たくさんあってどれを入れたものか迷っている。 HTML::WikiConverterからいくつか調べてみたところMediaWiki、PbWikiあたりがテーブルが使えてよさそう。 しかし、これだけ沢山あると後々のことを考える…

Visitors

オトナリからこんなのあるよってんでいれてみた。 webログ解析にはAwstatsを使っていて、定期的にHTMLを吐かせているのだがかなり負荷がかかる。 一方、Visitorsは3秒ほどで出力される。 Awstatsはperlで動いているのである程度はしかたないが、これだけ差…

引数でハッシュを渡す

サブルーチンでハッシュを渡してるつもりがうまくいっておらず、調べたらどうもこれではいけないらしい。 sub hash { my %hash = shift; .... } いろいろ調べたが参照渡しでこんな風にすることにした。 sub hash(\%) { my $hash = shift; my %hash = %{$hash…

cgi-lib::ReadPares

いま手直ししているスクリプトでどうやってフォームから送られたファイル名を取ろうかと悩んでいたらちゃんと変数に入ってるみたいだ。ソースをよく読んでみると'%in'以外にも'%inct'と'%incfn'も生成しているらしい。 %inctはin"Content-Type"の略でフォー…

flockとopen

flock関数でロック中のファイルをopenするとどうなるか試してみた。 予想ではopenに失敗すると思ったが、何事もなくスクリプトが終了してしまった。 おかしいと思いファイルに書き込んでみたが、書き込みはできなかった。 どうやらロック中でもファイルはope…

特殊変数@INC

useやrequireでファイルを呼び出すとき、この変数に入ってるディレクトリを探索する。 たとえば/cgi-bin/lib/にJcode.pmやcgi-lib.plが入っているとする。 スクリプトで別ファイルを呼び出すときいちいち相対パスで指定しなくても、 この変数に/cgi/lib/を入…

昨日の続き

methodを呼ぶときは第1引数にオブジェクト自体が渡されるので sub read(){ $self = shift; } が入るモヨー。 なので普通に引数を渡しても第2引数から渡るので問題ない。 いじってたスクリプトもなんとか動作するようになった。 何となーく程度に理解できたか…

オブジェクト指向

perlでオブジェクト指向プログラムに挑戦してみた。 とりあえずスクリプトで扱うファイルをパッケージ化してみる。 ファイルからデータを読む、追加する、削除する、と簡単なものだ。 pillowのfile.plを参考に書いてみるがよく理解できない。 メソッドごとに…

自前アンテナ

で自分の管理してるBBSがうまく更新されてない。 どうもあとで付け足した最終更新日を出力する部分がうまく動作してないようだ。 ちょっと調べたらすぐに原因がわかった。 自分でCGIを作る時によく使うサブルーチンをライブラリーとして共有してたのだがいつ…

自分で書いたスクリプトが、、、

読みづらい。 毎日見てればそうでも何かもしれないがやはり基本的に読みづらいのだろう。修正するのに一苦労・・・

pillowを修正してみた。

うまく動かないので自分で修正してみた。 file.plのwrite_delメソッドを open(OUT, "> $self->{'log_path'}/${file_name}"); flock(IN, 2); for ($i = 0; $i < $self->{'total'}+1; $i++) { # 削除メッセージ next if ($del_number == $i); $self->write_one…

pillowのバグ?

設置していろいろ使ってみた。 2,3個書き込んで削除したりしてたら、ツリーの表示がおかしくなった。 どうもツリーが無限に深く表示しようとしているモヨー。 なんかまずい操作でもしたかな? ってか最新ので試してみよお。

pillow

隣の人から聞いて使ってみた。 今まで探してきた掲示板のなかでかなり完成度が高く、 ソースも各動作ごとでパッケージ化されていてスッキリしている。 なかでもログファイルまでもオブジェクト化されているのがすばらしい。 しかしヘタレの自分にはなかなか…

use strict;

現在作成中のスクリプトに付けたら、同じくらいの大きさのエラーが帰ってきた。 やっぱりもっと整合性のあるperlを書かないといけないな。

socketでhtmlドキュメントをGET

どこかのサイトで見たほぼそのままのソース。 $geturl = "http://d.hatena.ne.jp/shinchan/rss"; $geturl =~ /http:\/\/([^\/+?)\/(.*)/i; $hostname = $1; $file_addr = "/$2" $addr = (gethostbyname("$host"))[4]; $name = pack("S n a4 x8", 2, 80, $add…

URLエンコード

とりあえず他人の書いたのをパクってこんなのになりました。 sub url_encode(){ $str = shift; $str =~ s/[^\w ]/'%'.unpack('H2',$1)/eg; $str =~ tr/ /+/; return $str; }[^\w ]ってところで人によっては書き方が違うみたい。 うまく動いてるからどうでも…

アセッタ

あるファイルを別名で保存するためこんなスクリプトを使っていた。 #!/usr/bin/perl$before = shift; $after = shift;exec("cat $before > $after");exit;これを使ってコピー前とコピー後のファイル名を同じで実行すると copy hoge.pl hoge.pl警告が出てくる…

splice関数

いままで配列操作の関数はpush,pop,shift,unshiftだけしか知らなかった。 splice関数を使えばこの4つの関数は忘れてもいいくらい応用がきく。 こんな便利なものがあったんですね、、、

join関数

いままで日記や掲示板のログを書き込むときいちいち $record = "$title\c@$comment\c@$dc_date\c@";、ってやってたけどjoinを使えば $record = join("\c@",($title,$comment,$dc_date));と簡単で見やすくなり、カッコイイ。 "\c@"も"\x00"ってしたほうがいい…

配列変数のメモ

関数でリスト(配列)を返すときに順番を入れ換える。 ($year,$month,$day,$hour,$min,$sec)=(localtime(time))[5,4,3,2,1,0];にて返り値の順番を変えて変数にいれることができる、と。

画像ファイル名のバグ

自分の管理してる掲示板に画像をアップできるように改造してみたがうまくいってないモヨー。 受け取った画像データの名前がとんでもないことになってるみたい。 "C\My Document\My Picture\hogehoge.gif"とかってファイル名になってる。 フォームのヘッダ情…

感想文

ここんトコcgiを書いてて思ったこと。 もっとスマートな書き方がありそうだがヘタレなためソースが自分でも見づらい。 HTMLを吐かせる部分がソースと混ざって読みづらい。 サブルーチンをもっと汎用性のあるものにしたい。 やっぱり、後から機能を追加するの…

socket関数

とほほのperl入門より $addr = (gethostbyname("www.xxx.zzz"))[4]; $name = pack("S n a4 x8", 2, 80, $addr); socket(S, 2, 1, 0); connect(S, $name); binmode(S); select(S); $| = 1; select(stdout); print S "GET /index.html HTTP/1.0\r\n\r\n"; whil…

アルファベットに1足す。

単純に'A'に1足したら'B'になると思ってたけどダメだた。 いちど数値に変換してからやる方法をメモ。 $char = 'A'; print "$char\n"; $char = unpack("C",$char); $char++; $char = pack("C",$char); print "$char\n";これでなんとかうまくいった。

cgi-libのReadParseルーチン

フォームで送ったデータをReadParseで加工してもらうと$in{'hogehoge'}などができるのは知っていたが、 もうひとつ@inにも有益な情報が入っているようだ。 @inにはフォーム情報みたいなのが入ってる。 これを利用すればいろいろできそおだ。

画像アップCGI

<form action="$script_url" method="$method" ENCTYPE="multipart/form-data">でフォームデータを送る必要があるようだけど、ENCTYPE="multipart/form-data"でテキストを送って大丈夫なのかな?</form>

画像アップCGI

<input type="file" name="image" >で受け取ったファイルをアップしたいのだがうまくいかない。 単に変数に代入してもファイル名が入るだけで、どうやって画像データを受け取ればいいのかわからない。 はてなの画像アップのソースを見ても同じようなので、このフォームだけでいいと思うんだけ…

ファイルの指定行にデータを挿入する

サブルーチンを考えていたが、自分の能力では ファイルのデータをすべて変数に読み込んでおいてから加工してファイルに上書きする って方法しか思いつかない。 これだとファイルのデータが大きくなると処理に時間がかかることになる。 seek関数を使えばなん…

もじゅーる?

CGIでheadとかfooterとかerrorをよくサブルーチンとして使うのでいつでも使えるようにモジュール化してみた。 さっそく、requireで読み込んでテストしてみるがエラーが出てうまくいかない。 よーく調べてみると、読み込まれるファイルの最後に"1;"って行が必…