perl

フィボナッチ数

「プログラマの数学」を読んでいて、再帰のところでフィボナッチ数列が出てきたので、フィボナッチ数を求めるプログラムをPerlで書いてみました。 フィボナッチ数については、フィボナッチ数 - Wikipediaを参照してください。 #!/usr/bin/perl use strict; u…

cpanminus

昨日のYokohama.pm #5で話があったcpanminusを使ってみました。 cpanminusは単一のPerl Script、ポータブル、高速、省メモリ、プラガブルなcpan shellの代替です。 cpanminus - get, unpack, build and install modules from CPAN インストール方法は、gitか…

Yahoo!日本語形態素解析APIを使う

今さら感はありますが、日本語形態素解析APIを使ってみました。 前準備 Yahoo! JAPAN IDを取得 Yahoo!デベロッパーネットワークでアプリケーションIDを登録 サンプルコード #!/usr/local/bin/perl use strict; use warnings; use Encode qw/encode_utf8/; us…

ジャニー喜多川ボット的なものを作った

http://twitter.com/jkitagawa_bot ジャニー喜多川ボット的なものを作りました。 機能的には、定期的にジャニーさんぽいことをつぶやくのと、フォロワーに一方的につぶやくだけです。 ジャニーさん語録を調べるだけで、お腹いっぱいになりました。 次は、フ…

Config::Pitのインストール

FreeBSDへのインストールがうまくできなかったので、作業メモ。 local::libでユーザ環境にインストールしてます。 cpanでインストールすると、make testで怒られました。 cpan> install Config::Pit (中略) Running make test t/00_compile.t ........... ok…

PerlでLDAPアクセス(use Net::LDAP)

PerlでLDAPアクセス。 #!/usr/bin/perl use strict; use warnings; use Net::LDAP; my $argv = shift; die "usage: $0 args\n" unless (defined $argv); my $ldap_srv = 'localhost'; my $ldap_port = '389'; my $dn = 'cn=Manager, dc=my-domain, dc=com'; …

アカウントやパスワード情報をハードコーディングしない方法(use Config::Pit)

スクリプトからWebサービスを利用するときアカウントやパスワード情報をハードコーディングする場合がありますが、コードを公開する際うっかりそのまま公開なんてことにならないよう、Config::Pitを使うと良い。 アカウントやパスワード情報を~/.pit/以下にY…

Webアプリケーションフレームワーク「Catalyst」のインストール

Catalystのインストールには、主に以下の方法があると思います。 CPANからCatalyst::RuntimeとCatalyst::Develをインストール。 cat-installでインストール。CPANからCatalyst::Develをインストール。 CPANからTask::Catalystをインストール。 Linuxディスト…

Building Perl-5.10.1

5.10系の最新版5.10.1をビルドした。 $ wget http://www.cpan.org/src/perl-5.10.1.tar.gz $ gzip -dc perl-5.10.1.tar.gz | tar xvf - $ cd perl-5.10.1 $ sh Configure -DDEBUGGING -Doptimize='-g -pipe -Os' -Dusethreads -Dusemultiplicity -Dprefix=/u…

goo.glのショートURLを作れるWWW::Shorten::Googleを使ってみた(use WWW::Shorten::Google)

Googleの短縮URLサービスgoo.glのAPIを叩くモジュール「WWW::Shorten::Google」を使って、TwitterにPostするスクリプトを書いた。 #!/usr/bin/perl # file: twitGoogleShorter.pl # usage: twitGoogleShorter.pl ["Twit Message"] use strict; use warnings;…

ブログの写真からカメラの機種を調べるスクリプト

先日、GPSデータの削除に使ったImage::ExifToolですが、カメラの機種情報を取得することもできます。 Image::ExifToolで写真のGPSデータを削除する - jitsu102の日記 ということで、ブログの写真からカメラの機種を調べるスクリプトを作りました。 #!/usr/bi…

XML::LibXMLインストール時に必要なdebパッケージ

The Comprehensive Perl Archive Network - www.cpan.orgからインストールする時に、次のパッケージを事前にインストールすると良い。 libxml2 libxml2-dev libz-dev XML::LibXML - Perl Binding for libxml2 - metacpan.org

Image::ExifToolで写真のGPSデータを削除する

携帯などで写真を撮ると、GPSデータがEXIF情報として保存されます。 このEXIF情報ですが、https://addons.mozilla.org/ja/firefox/addon/5673を使うと簡単に確認することができ、しかもGoogle Mapにマッピングまでしてくれます。 便利な情報ではあるのですが…

Perlでの日本語処理

Encodeでラクラク日本語処理 - JPerl Advent Calendar 2009 スゴい分かりやすかったです。 定期的にネタになりますよね、日本語処理というかEncode。それだけ分かりにくいってことですね。 基本的には、 処理前decode 処理 処理後encode を守れば大丈夫。 以…

Shibuya Perl Mongersテクニカルトーク#12@リクルート本社サウスホール

#11同様Perlネタではなく、今回はKVS・データベースです。 KVS・データベースの様々な話が聞けて、勉強になった。 kumofs・hBase・Spiderなど、使ったことがないものが多かったので、いろいろ試してみたい。 NoSQL特集ということだったが、RDBMS Shardingに…

PerlでOOPの復習 〜Moose〜

2007年頃からブームになり、Perlのオブジェクト定義の定番になりつつある、Mooseです。 前回のサンプルコードをMoose化しました。 (サンプルコード) package MyApp; use strict; use warnings; sub new { my ($class, $args) = @_; my $self = bless { 'name…

PerlでOOPの復習 〜Class::Accessor::Fast〜

Perlでのオブジェクト指向の復習を始めました。 Class::Accessor::Fastは便利だと再認識しました。 例えば以下のような、名前(name)とメールアドレス(email)とホームページ(url)をプロパティに持つオブジェクトを作成するコードをClass::Accessor::Fast で書…

マスタリングPerl (18章 プログラムとしてのモジュール)

Perlプログラム(スタンドアロンプログラム)を作成する際に、モジュール形式で開発すれば開発ツール・テストツールを使用することができる。 本書では、"modulino"(プログラムとモジュールの混成物)とし、プログラムとしてもモジュールとしても動作するような…

マスタリングPerl (17章 タイ変数のマジック)

tieは、スカラー・配列・ハッシュ・ファイルハンドルを適切な名前を持ったメソッドを提供するクラスと結び付け、これらの変数に対する通常の処理を横取りしてエミュレートすることができる。 例えば、dbmopenのようにハッシュ変数とデータベースを結び付ける…

マスタリングPerl (16章 ビットを利用する)

2進数記法 0b記法 my $value = 0b10; # 2 my $value = 0b1010_0101; # 165 oct関数 my $value = oct("0b10"); # 2 printfで0b表記を出力 my $value = 0b0011; printf "%#b\n", $value; # 0b11 32桁の2進数表記にする場合は、"0"を追加する。 0bが追加される…

マスタリングPerl (15章 Podを利用する)

Podのディレクティブ "="から"=cut"まで。 perldoc Podの出力フォーマットを変換する。 デフォルトはターミナル出力フォーマットへ変換する。 -t Podをテキスト形式に変換する。 $ perldoc -t CGI > cgi.txt -m ソースファイルのみが出力される。 -l トラン…

Perlでセッション管理

復習を兼ねて。 セッション管理 今さら説明する必要はないと思いますが、HTTPプロトコルはクライアントからWebサーバーへのリクエスト毎にコネクションの接続/切断が行われるため、画面遷移が発生するとリクエストが同一クライアントから送信されたものか判…

マスタリングPerl (14章 データ永続性)

pack/unpack pack関数は、テンプレート文字列を使って、データを単一な文字列に変える。 データの取り出しには、unpack関数を使用する。 変換する文字列の長さを指定すると必ず指定長になるので、seekやsysreadで正確なバイト数を読み出すことが可能。 Data:…

Cookieに複数の値を設定する時

備忘録。 Set-Cookieを複数書けば設定できるが、改行コード"\n"を忘れると最初の値しか設定されない。 ハマった >< print "Set-Cookie:session_id=11111;expires=Fri, 06-Nov-2009 23:00:00 GMT;\n"; print "Set-Cookie:user=hogehoge;expires=Fri, 06-Nov…

マスタリングPerl (13章 ロギング)

Log4perl Javaロギングメカニズムlog4jのPerl実装。 #!/usr/bin/perl use Log::Log4perl qw(:easy); Log::Log4perl->easy_init($ERROR); ERROR("Error messages!!"); # ロギングレベルを示す$ERRORとメッセージをログする関数ERRORが提供される # 上記の場合…

マスタリングPerl (12章 エラーの検出と報告)

Perlエラーの基本 ($! -> オペレーティングシステムエラー) Perlがシステムに処理を依頼した時、システム側で処理ができない場合 Perl組み込み関数は"false"を返し、"$!"にエラーメッセージを設定 ($? -> 子プロセスエラー) プログラムによって起動されるサ…

CGI実行時の"Premature end of script headers"エラー

「cgiがContent-Typeヘッダを出力する前に終了した」ということらしいで、ヘッダー出力をコードの始めの方で記述してやれば解消するようです。 しかし、他にも改行コードの問題やファイルの転送モードの問題とか指摘されていて、原因は実際のところ良く分か…

マスタリングPerl (11章 Perlプログラムの設定)

Perlプログラムを設定する際に、ユーザにプログラム自体を開かせ変数を修正させるようなことはしてはならない。 設定セクションを別ファイルに切り出す 設定セクションを別ファイルに置き、メインプログラムに引き込む。 設定セクションのコードは、別ファイ…

マスタリングPerl (10章 モジュールの修正と応急処置)

モジュール修正の解決策 パッチを作者に送る diffコマンドを使用してパッチを作成する。 $ diff -u original_file updated_file > original_file.diff 作者はpatchコマンドで取り込み。 $ patch < original_file.diff ローカルパッチ モジュールのバージョン…

マスタリングPerl (9章 動的サブルーチン)

変数に無名サブルーチン・サブルーチンリファレンスを格納することで、同じコードで振る舞いを変えること(ポリモーフィズム)が可能。 振る舞いを変えるには、if文で分岐する方法とハッシュを利用した方法があるが、ハッシュの方が美しいコードだと思う。 無…