Perl

Mooseを試そう

30分プログラム、その509。Perlのモダンなオブジェクトシステム、Mooseを試してみた。 銀行口座クラスをとりあえず作ってみたけど、これだけだとあまり利点が感じられない。せいぜいアトリビュートを簡単に定義できるぜい、という程度。 きっとbefore/after/…

Mooseを勉強しよう(インストール編)

30分プログラム、その508。Perlでオブジェクト指向を使うときは、Mooseを使うのがモダンらしい。 それはさっそく試してみねば、と思いきや依存関係がわりと多いらしくて全然インストールが終わらない。実際に試すのはまた明日。 インストール cpan> install …

Whitespace実装用のスタック

30分プログラム、その502。最近、Whitespaceとかbrainfuckとかの難読言語が流行っているらしいので、ボクもWhitespaceを実装してみようと思う。というわけで、まずはスタックを実装してみた。wikipedia:Whitespaceに載っていた5つのスタック操作は実装してみ…

2行を1行にまとめる

30分プログラム、その446。http://gauc.no-ip.org/awk-users-jp/blis.cgi/DoukakuAWK_020より。 123458.69 KK5899966 23698565.36 MM5897155998というものを以下のようにします。 123458.69,KK5899966 23698565.36,MM5897155998要するに 2 行を 1 行にして表…

fishっぽいpwd: /usr/loacl/binが/u/l/binになるやつ

30分プログラム、その439。fishにあるprompt_pwd関数をPerlで再現してみる。 このprompt_pwdはわりと素敵で、/usr/local/binを/u/l/binみたいに最後のディレクトリ名以外を一文字に省略してくれる。これをscreenのステータスラインに表示するようにすると、…

リズム感を測定するプログラム

30分プログラム、その439。またもmixiの課題丸投げコミュより。C/C++の課題丸投げ| 構造体についてより。 オリジナル問題-2: リズム感を測定するプログラム 経過時間の測定キーボード入力の時間間隔を測定する. 前回のリターン入力から今回のリターン入力ま…

ランダムに行を抜き出すプログラム

30分プログラム、その433。テキストファイルからランダムに行を抜き出すプログラム。 1000行ぐらいあるCSVから特定のデータを抜き出さないといけないらしい。しかも、かなり表記にゆれがある。とりあえず、適当にデータを抜き出して傾向を調査しようと思う。…

Perlで例外

30分プログラム、その428。Exception::Class - A module that allows you to declare real exception classes in Perl - metacpan.orgを使うとPerlでも例外が使えるらしいので試してみる。 使い方 # try eval{ # throw InvalidArgument->throw("some_message…

特定の行が含まれていると異常終了するプログラム

30分プログラム、その421。特定の行が含まれていると異常t5終了するプログラム。 ボクはOUnitを正しく使いこなせていないらしく、エラーが発生しても終了コードは0のままだったりする。 $ omake check; echo $? ... FAIL: base module test:0:range OUnit: e…

自前でglobのマッチング

30分プログラム、その415。自前でglobのマッチングをやってみた。 いきなり正規表現にチャレンジするのは大変そうだったので、まずは簡単そうなグロブから。それも使えるメタ文字は*だけの非常に単純なやつで。 本当は、グロブのマッチにはバックトラックが…

各行ごとにコマンドを実行するスクリプト

30分プログラム、その408。ファイルの各行ごとに特定のコマンドを実行するスクリプトを作ってみた。例えば、 foo bar bazみたいなテキストファイルがあった場合、 $ each-line rm -rf < dir.txtとすると、全部消せる。(もっとも、この場合はxargsで十分だけ…

曜日を判定するプログラム

30分プログラム、その402。日付を与えると曜日を返す関数を書いてみた。 本当はカレンダーを作るつもりだったけど、整形して表示する時間はなかった。 使い方 # 1970/1/1が基準 $ perl cal.pl 1970 1 1 Thu # 今日は水曜日 $ perl cal.pl 2008 10 29 Wed ソ…

Unicodeの名前を出力するやつ

30分プログラム、その395。Unicodeの名前を出力するやつを作ってみた。 Perlのcharnamesを使うと、簡単に文字コードから文字の名前が取得できるらしい。なので、前から作ってみたかった文字の名前を表示するやつを作ってみた。 $ perl name.pl h LATIN SMALL…

パイプでも複数行のlsが使いたい

30分プログラム、その388。 普通にlsをパイプで使うと、一行になってしまう。 $ ls | head 13.pl 180-croquis_file.pl 181-hello.oz 182-mapreduce.ml 183-p4.ml 184-tarai.hs 184-tarai.rb 185-auto_insert.rb 186-url.rb ls -Cを使えば複数行になるけど、…

PODを使ったHTML化

30分プログラム、その381。文字列をHTML化するのにPOD(Plain Old Document)を使ってみる。 PODファイルをHTMLファイルに変換するpod2htmlコマンドは用意されている。これをうまいこと利用して、文字列をHTMLに変換するpod2html関数が作りたかった。RailsのRe…

Perlでも普通のリスト操作を

30分プログラム、その372。Perlの話をするたびに、id:Gemmaさんが「Perlのリストはキモい、キモすぎる。ネストするだけでリファレンスを使うなんでありえない。」と言いつづけてる。 なので、Perlでもごく普通の単方向リストを作ってみた。これなら、あたり…

AtomPubではてなに投稿

30分プログラム、その364。AtomPubを使って、はてなダイアリーに投稿してみた。 本当は、はてダラをAtomPubに対応させたかったんだけど、AtomPubは日付単位でなく、記事単位で投稿とかをするので、ちょっと難しいかもしれない。 使い方 ソースコード中のとを…

Games::Puzzles::SendMoreMoneyを試してみた

30分プログラム、その357。CPANにあるSEND+MORE=MONEY専用モジュールのGames::Puzzles::SendMoreMoneyを試してみた。 # Log4perlを入れないと使えない。依存関係のミス? cpan> install Log::Log4perl cpan> install Games::Puzzles::SendMoreMoney SとMが0以…

Test::Moreを試してみる

30分プログラム、その352。Perlのユニットテストを試してみる。 Test::SimpleとかTest::MoreとかTest::Unitとか多すぎるだろ。第1回 Perlにおけるテストの概要/TAPとは?:Happy Testing Perl|gihyo.jp … 技術評論社あたりを見るかぎりでは、Test::Simple…

Remeber the milk APIのauth keyを取得

30分プログラム、その347。やっとRemember The Milk: Online to-do list and task managementで認証に必要なauth keyの取得する方法が分った。 参考にしたのは、Remember The Milk - Services / API / Authentication。簡単にまとめると、 RESTでrtm.auth.ge…

Remember the milkのAPIで認証する

30分プログラム、その346。Remember The Milk: Online to-do list and task managementのAPIで認証が必要なやつにチャレンジしてみる。 が、うまくいかない。Remember The Milk - Services / API / Authenticationを参考にしてるはずなんだけどなぁ。 使い方…

Remember the milkのAPIで遊ぶ

30分プログラム、その345。Remember The Milk: Online to-do list and task managementのAPIで遊んでみる。特に作りたいアプリは無いので、rtm.test.echoを使った贅沢なechoを作ってみた。APIはRESTなので http://api.rememberthemilk.com/services/rest/?me…

Probelm 59 - Project Euler

30分プログラム、その337。Problem 59 - Project Euler。 (訳者注: 文字コードの説明は適当です) 各文字はそれぞれ一意のコードに割り当てられている. よく使われる標準としてASCII (American Standard Code for Information Interchange) がある. ASCIIでは…

Problem54 - Project Euler

30分プログラム、その331。Problem54 - ProjectEuler。id:mzp:20080703:eulerの訂正版。やっと解けた。 id:rst76さんの54問目 - Life Goes Onを走らせて、diffを取ったりしてデバッグした。=と==を間違えてたり、Kの次がAじゃなかったりしてたところを直し…

Problem54 - ProjectEuler(未解決)

30分プログラム、その330。id:mzp:20080701:eulerを動くようにした。でも答えは違っているので、続きはまた明日。 コード量があるから、ちょっとした修正をするだけですぐ30分たってしまう。 使い方 $ perl problem54.pl ... 702 ソースコード #! /usr/bin/p…

Problem54 - ProjectEuler(未解決)

30分プログラム、その329。Probelm54 - Project Euler。 まだ解けていないけれど、30分たったので一応。 汚ないコードを読んで心が汚れた直後だったので、無心でコードを書きたかった。なので、冗長な部分がかなりある。 いまひとつうまく動かないので、明日…

no warnings 'recursion';

404 Blog Not Found:perl - use warnings; # -w でなくてのはてブコメントに何気なく use warningsで再帰を書くと、毎回警告されるのがうざい。 と書いたら、dankogaiとid:fbisさん(id:fbis:20080620)から凄い勢いで「no warnings 'recursion';使え」とツコ…

Problem49

30分プログラム、その323。Problem49 - Project Euler。 項差3330の等差数列1487, 4817, 8147は次の2つの変わった性質を持つ。 (i)3つの項はそれぞれ素数である。 (ii)各桁は他の項の置換で表される。 1, 2, 3桁の素数にはこのような性質を持った数列は存在…

Problem43

30分プログラム、その316。Problem43 - Project Euler。 数1406357289は0から9のPandigital数である (0から9が1度ずつ現れるので). この数は部分語が面白い性質を持っている.d1を1桁目, d2を2桁目の数とし, 以下順にdnを定義する. この記法を用いると次のこ…

Problem39

30分プログラム、その312。Problem39 - Project Euler。 辺の長さが{a,b,c}と整数の3つ組である直角三角形を考え, その周囲の長さをpとする. p = 120のときには3つの解が存在する: {20,48,52}, {24,45,51}, {30,40,50} p 数式をがんがん変形したら、かなり高…