タグ

ブックマーク / hakobe932.hatenablog.com (8)

  • Parse::RecDescentでJSONをパース - はこべにっき ♨

    JSON::Hatchet の構文解析子 - Tociyuki::DiaryのJSONパーサがすっきりと書けていたのものだから,ちょっとうちもJSONパースしたくなってので書いてみました.といってもLL構文のパーサを1から書くのも芸がない感じだったので.Parse::RecDescentというCPANモジュールを使ってJSONのパーシングをしてみました. Parse::RecDescentはその名のとおり,汎用の再帰下降型パーサです.LL(1)文法にのっとっていれば,パースが可能です.*1 id:tociyukiさんがの記事にあるBNFを流用させてもらい,JSONのパーサを書くと以下のようになりました. このように,BNFっぽいものを記述するだけでパースを行うことができてお手軽です.パターンとして正規表現を書くこともできて,スキャナーに相当することもやってくれてます. 構文規則に合わせてパ

    Parse::RecDescentでJSONをパース - はこべにっき ♨
  • bombtterをインスパイアしまくったzerotterを作った - はこべにっき ♨

    某ゼロっぽいbombtterクローンであるところのzerotterを作ってみました.tetsuwo_botのインスパイアでもあります.友達と話していて思いついたのでとりあえず書いてみた感じです. bombtterがすごくがんばってくれているおかげで,クローンを作るのは異常に簡単でした.完成したのが以下のスクリプトでcronでまわしています. use strict; use warnings; use utf8; use Net::Twitter; use XML::Feed; use URI::Fetch; use URI; use DateTime; my $SERIF = [ ["このゼロが命じる… ", "を爆破せよ!"], ["全力で", "を爆破せよ!"], ["今ここに", "の爆発を宣言する!"], ["そうだな… ", "は…… 爆発しろっ!"], ]; # 最後に更新した

    bombtterをインスパイアしまくったzerotterを作った - はこべにっき ♨
  • 第16回Ruby勉強会とAMB - はこべにっき ♨

    第16回Ruby勉強会にいってきました。数少ない、うちがRubyistになる瞬間です。でも今回は割とPerlも書いてました。ごめんなさい。 だいぶメンバーも見慣れた感じになってきましたね。いろいろと情報交換や議論が行われるだけでなく、いろんなイベントもここのメンバーの中から行われるようになってきました。関西でLLといえばRuby勉強会はかなりいい環境ですね。運営スタッフのみなさんありがとー。 といっても、もちろんRubyメインなので、Perlの形見は狭いのです。Perl方面もがんばらないと! 今回は、yharaさんの発表である「30分で分かる継続の使い方」におもしろくてハマりました。継続はかなりすごいけど、かなりきもいですね。 そのyharaさんの発表の中でRubyの継続を使った具体例としてAMBというモジュールというのが出てきたのですが、これが中々クールだったのでPerlで実装できないか

    第16回Ruby勉強会とAMB - はこべにっき ♨
  • スタンドアロンWebサーバ書くのにPOEはいいかも - はこべにっき ♨

    スタンドアロンWebサーバ書くのにPOE::Component::Server::HTTPはかなりお手軽ですね。エラー処理とかいろいろはしょると以下のコードで、Webサーバが走ります。 use strict; use warnings; use POE qw( Component::Server::HTTP Sugar::Args ); my $httpd_aliases = POE::Component::Server::HTTP->new( Port => 8080, ContentHandler => { '/' => \&httpd_index, } ); sub httpd_index { my ($request, $response) = @_; $response->code(RC_OK); $response->content('Hello, POE!'); return

    スタンドアロンWebサーバ書くのにPOEはいいかも - はこべにっき ♨
  • コマンドラインからWikipedia - はこべにっき ♨

    たまに使う気もするので~/bin入れておく。 $ wikipedia.pl Perlとすると、コマンドラインにWikipediaから引数で与えたキーワードの要約を取得して表示する。 ソースは以下。要WebService::SimpleAPI::Wikipedia。Yappoさんthx。 use strict; use warnings; use WebService::SimpleAPI::Wikipedia; use Encode; my ($keyword) = @ARGV; $keyword = ucfirst $keyword; # Wikipediaではすべて一文字目は大文字 # SimpleAPIを使ってWikipediaから情報を取得 my $wiki = WebService::SimpleAPI::Wikipedia->new(); my $res = $wiki->ap

    コマンドラインからWikipedia - はこべにっき ♨
  • Perlで例外オブジェクトをeval & catch - はこべにっき ♨

    ひさびさにPerlベストプラクティスネタ。 Perlで例外処理というと、evalして$EVAL_ERROR(= $@)の文字列を判定するしかないと思っていたのだけれど、ちゃんと例外オブジェクト使う方法があった。やっぱりなんでもありだなPerlは。 PBPによると、例外オブジェクトは自分で作ることもできるのだけれど、いくつも注意しなければならないポイントがあるようだ。 文字列変換(q{""})のオーバーロード 例外をキャッチしたかを返すcaughtメソッド エラーメッセージの出力先の変更 このあたりが正しく実装できていなければだめ。しかしながら、CPANにちょっとお伺いをたてるだけで、例外用のException::Classといういかにも便利そうなモジュールを利用できるらしい。 このException::Classを利用して、Perlの例外オブジェクトを定義してみた。 use warning

    Perlで例外オブジェクトをeval & catch - はこべにっき ♨
    seamlessbias
    seamlessbias 2006/12/16
    例外オブジェクトとか。使ったことはないなぁ。eval {hoge;} if ($@) { fuge; }で済ませちゃう。
  • sort時にキャッシュを仕込んで効率化する - はこべにっき ♨

    最近はPerl Best Practiceを読んでいることが多いので、おもしろかった部分をまとめて書いておこうかと思う。ということで、日はPerl Best Practice 8.1章 ソートからのネタ。 sortはブロックを渡すことでソート方法を柔軟にコントロールできる。ただ、そのブロック内での計算量が大きくなるとソートの効率が落ちる。ソート中に何度も比較を行うちに同じ計算を何度もすることになってしまうからだ。 そこで、いろいろな工夫が考えられているらしい。PBPで紹介されていたもを以下にまとめてみた。 工夫なしでそのまま まず、一番ベタなソートが、以下のコード。 use Digest::SHA1 qw(sha1); my @sorted_titles = sort { sha1($a) cmp sha1($b) } @titles;このままだと、何度も同じ値のダイジェストを計算するこ

    sort時にキャッシュを仕込んで効率化する - はこべにっき ♨
    seamlessbias
    seamlessbias 2006/11/12
    個人的にはschwarzian transformが一番好きな方法。
  • はこべにっき# - Flickrから素敵な壁紙を自動で収集

    ネタフルのFliclkrで壁紙を探そう!を読んで、このWallpaperグループからずるずると壁紙をひっぱってきて使えたら素敵じゃないかと思ったので、そんなPerlスクリプトを書いた。 $ perl flickr_collect ~/Desktop/flickr_wallpapersとかやると、指定したディレクトリにFlickrの Wallpapers (1024x768 minimum)グループの最新壁紙30件をダウンロードしてくれる。 画像サイズは、だいたい指定した壁紙サイズに近いやつを落とすようになってるので、とんでもなく大きかったり小さかったりする画像は落ちてこないようになっている。ダウンロードする壁紙の枚数やサイズは、スクリプト内のの定数を変更すればできる。 あとは、煮るなりやくなり。Cronでまわせばどんどん新しいのがおちてくるようにできるし、Mac OS Xではディレクトリを

    はこべにっき# - Flickrから素敵な壁紙を自動で収集
    seamlessbias
    seamlessbias 2006/10/28
    Flickrから壁紙を持ってくる。「Plaggerでどうやるかはきいてねーよ!」。/system関数でcurl使わないで、LWP使ったほうがportable。/書いた。
  • 1