nDiki : Perl
Perl
Naneyがよく使用しているプログラミング言語。 この nDiki を提供している DiKicker も Perl で記述されている。
ちなみに ``Perl はプログラミング言語を指し、``perl はその実装を指す(perlfaq1)。
ライブラリ
- 標準 Perl ライブラリ
- Perl モジュール
- Perl モジュールリスト - nDiki で取り上げた主なモジュールについて
関連情報
- CPAN
- Perl style guide - perlstyle で書かれている内容のメモ
- Naney Perl Coding Standards
- CGI
- Pod
- XS
- SWIG
- UTF8 フラグ
- Perl が好きな理由
- 社内 Perl 勉強会
- TIMTOWTDI
- 正規表現
スポンサード リンク
Related term
2009年2月23日 (月)
■ PAR で DLL ファイルをロードできなかったら大文字小文字を疑え

PDL を使っている Perl プログラムを、昨日構築した今ごろの環境で PAR を使って実行可能ファイル化したんだけれども、実行してみたら
Can't locate loadable object for module PDL::Core in @INC ...
というエラー。 実行時のキャッシュディレクトリを見ると core.dll が同梱されていない模様。 なんでだー。
いろいろやってみたところ、もしやと思ってインストール済みの core.dll を Core.dll という名前に変えたらエラーが出なくなった(正確には次のモジュールで同様のエラーが出た)。
ファイル名の大文字・小文字が問題だったらしい。 PAR の FAQ には「Win32::Perms の Perms.DLL でこのエラーが出たら、Perms.dll にしてね」と書かれている。 最初これ拡張子の問題だけだと思っていた。 ベース名でも同様のようだ。
以前は問題なかったから、比較的新しい PAR で発生するようになったと思われる。 これ絶対はまる。
- Template Toolkit + PAR (2004-09-13)
- 今日のさえずり - くるみマフィンの賞味期限が2月30日 (2009-02-23)
- ActivePerl をやめて Strawberry Perl へ (2009-08-25)
- Wineを入れてみる (2005-03-31)
- [ Java ] 22:30 Cocoon2 はどうかな? (2001-12-05)
2009年3月13日 (金)
■ 久しぶりの C++ は GNU Automake + CppUnit で

ちょっとした文字列構文解析関係の C++ コードを書き始めた。 C++ は随分触ってなかったので「C++ で書き直すのを考慮してそれっぽく Perl で書くから後で書き直して」と最初は言っておいたのだが、それもあんまりだと思って C++ で書くことにした。
Debian GNU/Linux 上で書くので GNU Automake + CppUnit で。 「Perl + Test::Harness」や「Java + Eclipse + JUnit」や「C# + Visual C# + NUnit」などと比べるとやっぱりタルいな。
1つメソッド書くのに、
と 4ファイル5カ所編集しなければならない。 クラス追加時には Makefile.am にヘッダファイルとソースファイルをテストケース用のと含めて4ファイル書き加える必要があるし。
あー面倒。
でも C++ で書き始めると楽しいんだよなあ。
- Twitter ベイジアンフィルタプロキシ (2007-12-29)
- ハッシュとは (2004-06-09)
- アクセサは foo と set_foo にしたい (2009-08-20)
- 今日のさえずり - 京都の小学校のコンピュータ室にいったら、Squeak が (2008-03-06)
- SCons は GNU Autotools のかわりになるか (2005-04-20)
2009年3月19日 (木)
■ 今日のさえずり - 「コメ兵」を「ベイヘイ」っていうな

@ 2009年03月17日
- 09:26 郵便局で手紙出した。チューリップの切手にしてくれた。 [mb]
- 12:12 何か楽しげなやつがきた。 http://movapic.com/...
- 12:16 お茶のティーバッグ切れたのでアップルティーで我慢する(唐揚げ弁当)。 *P3
- 12:47 江東区は定額給付金の案内がきたらしい。 *P3
- 14:43 amadana ポケットビデオカメラ SAL http://www.amadana.com/sal/ *P3
- 19:53 CppUnit がグリーンになったので帰る (テキスト版だからグリーンじゃないけど)。 *P3
- 20:04 鳥取の過疎加減で盛り上がった(注:本社鳥取)。 [mb]
- 25:42 何か楽しげなやつがきた。 [Flickr] http://tinyurl.com/dmyqko
- 25:47 最近 Twitter のアイコン変更が不調。 *P3
@ 2009年03月18日
- 07:07 台所のブレーカー落ちた。ティファールの電気ケトルと電子レンジ(トースター)同時はやはり駄目だった。 [mb]
- 11:58 Evernote のタグって階層化できるのか。タグ自体はグローバルで、表示上畳める以外の機能はないみたいだけれど。 *P3
- 15:34 Doxygen 用のコメントちょこちょこっと書いた。 *P3
- 19:13 鳥取は黄砂がすごいらしい(本社情報)。 *P3
- 21:26 定額給付金申請書届いた。 [mb]
@ 2009年03月19日
- 10:00 あ、アレグラ飲んでくるの忘れた。 [mb]
- 10:05 咲いてる。 http://movapic.com/...
- 10:13 アレグラ置き薬飲んだ。フー。 *P3
- 10:27 @finfine エバステル -> クラリチン -> アレグラときてますが、眠くならないしいいですよ。しかし今年は去年より症状がキツいです。
- 11:15 「ニュー新橋ビル」なのか「NEWしんばしビル」なのか知りたい。 *P3
- 12:14 はっちゃん日記のフィードを Google リーダーに登録。 *P3
- 13:06 「コメ兵」を「ベイヘイ」っていうな(自分も今確認するまで1文字目も漢字だと思っていたけれど)。 *P3
- 14:07 今 Skype4COM + Perl スクリプトでやっている「Twitter への書き込みを自動的に Skype ムードメッセージに設定」って、Skitter でも同じことができそう。 http://www.skypeup.com/skitter.shtml *P3
- 14:33 Scribus 1.3.3.12 インストール。 *P3
- 19:08 運転免許証更新のお知らせきた。 [mb]
- 今日のさえずり - 後ろ髪を触ったら寝癖 (2010-02-09)
- 今日のさえずり - モノを貰うとすぐに写真を撮る人 (2009-08-05)
- 今日のさえずり - たまにコブラみたいに唾ピューって飛ぶよね (2009-10-16)
- 今日のさえずり - 時代はアレグラ (2010-02-24)
- Twitter を使い始めて1年 (2008-04-06)
2009年3月20日 (金)
■ Twitter のアイコンを Perl スクリプトで更新する (改)

Twitter のアイコンを更新する Perl スクリプト (記事) が最近失敗することが多くなった。 どうやら同じファイル名の画像をアップロードするとうまく更新されないようなので、日時にもとづいたファイル名にしてからアップロードするようにしてみた。
最初に作った時から若干 Twitter のページ構造が変わってスクリプトも修正していたので、それと合わせると下記になる。
今のところ順調にアイコンチェンジできている感じだ。
#!/usr/bin/perl
use strict;
use warnings;
use WWW::Mechanize;
use File::Temp qw(tempdir);
use File::Spec;
use File::Copy;
die "no file name" if @ARGV == 0;
my $file_name = $ARGV[0];
my $name = 'ユーザ名';
my $password = 'パスワード';
my $mechanize = WWW::Mechanize->new();
$mechanize->get('http://twitter.com/');
die unless $mechanize->success;
$mechanize->submit_form(form_number => 2,
fields => {
'session[username_or_email]' => $name,
'session[password]' => $password}
);
die unless $mechanize->success;
$mechanize->follow_link(url => '/account/settings');
die unless $mechanize->success;
$mechanize->follow_link(url => '/account/picture');
die unless $mechanize->success;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst)
= localtime(time);
my $tmpdir = tempdir(CLEANUP => 1);
$file_name =~ /.*(\..*)$/;
my $suffix = $1;
my $tmp_file_name = File::Spec->catfile(
$tmpdir,
sprintf("%04d%02d%02d%02d%02d%02d$suffix",
$year + 1900,
$mon + 1, $mday, $hour, $min, $sec
));
copy($file_name, $tmp_file_name) or die $!;
$mechanize->submit_form(
form_number => 1,
fields => {'profile_image[uploaded_data]' => $tmp_file_name}
);
die unless $mechanize->success;
[ WWW::Mechanaize ]
- Flickr の写真を自動的に Twitter アイコンにする (2008-03-13)
- Twitter のアイコンを Perl スクリプトで更新する (2008-03-13)
- 今日のさえずり - 「コメ兵」を「ベイヘイ」っていうな (2009-03-19)
- mirror-2.9, put の chmod 不具合 (1999-01-19)
- ヨドバシカメラのデジカメプリントの品質に満足 (2008-03-28)
2009年7月29日 (水)
■ 今日のさえずり - キレイキレイで顔を洗ってみた。みんなにはないしょだよ。

@ 2009年07月29日
- 09:04 出社。けっこう汗かいたので、キレイキレイ(ハンドソープ)で顔を洗ってみた。みんなにはないしょだよ。 *P3
- 09:16 昨日西友で割安なボトルコーヒーを買って持ってきたんだけれど、冷蔵庫で冷えるのが待てなくて結局缶コーヒー。 *P3
- 09:33 会社のヒトはたまにしか Twitter 見ないのでヒミツ扱いなのです。あ、Twitter から Skype のムードテキストに自動設定してた。 RT @zakwa: @Naney ココに書いて内緒なんてありえない(笑)男性は思いっきり洗えてうらやましい。 *P3
- 09:44 すごいサッパリです! RT @nakaji32: キレイキレイで顔洗うとどういう状態になるんだろう?殺菌されてさっぱりするのかな? *Tw* *P3
- 10:16 Dell Dimension 4600C の電源が入らなくなった。 (Previous shutdown due to thermal event. Previous fan failuer.) *P3
- 10:18 Dell のテクニカルサポートに電話したら、電源まわりのパーツは生産終了・在庫無しで修理不能とのこと。合掌。 *P3
- 10:32 参考のために聞いたところ Dell の引き取り修理となったら 22,500円(送料込み) + 部品代だったらしい。 *P3
- 10:37 髪を10cmも短くしたのに誰も気がついてくれないと後ろの人が嘆いている。「髪の色明るくしました?」て聞いたらそれはしてないって。墓穴が深くなった。 *P3
- 10:45 深すぎて2度と上がってこれなくなりそう。 RT @ken2754: @Naney 『気づいても、かわいくなったときしか声かけないもんですよ』と言って温泉でるまで深くするとか。 *P3
- 13:13 これから午後半休。 [mb]
- 13:22 カード買った。「G.C. は業界ナンバーワンです」って言われた。 [mb]
- 13:31 イマココ! 長居無用な椅子中心のマクドナルド秋葉原駅前店。 L:東京都千代田区神田相生町1 [mb]
- 14:02 @yep Perl スクリプトで Twitter からフィード引っ張ってきて、Skype API 経由で流しこんでます。プロフィールリンク先のサイトにサンプル載せてあります(外出先につき URL は明示できず)。 [mb]
- 14:05 そろそろ恵比寿へ。今日は JR で。 L:秋葉原駅 [mb]
- 14:22 息するの省略したいぐらい蒸し蒸しする。 L:田町駅 [mb]
- 14:33 到着。 L:恵比寿駅 [mb]
- 18:53 向かいの席の人がケチャまつりガイド見ている。うらやましい。裏表紙はアキラの広告。 [mb]
- 18:57 今年のケチャまつりは7月30日から8月2日。 [mb]
- 24:54 2009年7月29日の歩行: 7876歩、6.11km、67分、5.46km/h、消費 297.0kcal、脂肪燃焼 42.5g、4.3エクササイズ。 *P3
- 26:04 Wi2 300 スタートキャンペーン 月額従量プラン申し込んでおいた。 *P3
- 26:18 Wi2 300 は、BBモバイルポイントは SpinNet で使えるし livedoor Wireless は FON_livedoor があるし Wi2 エリアに入る機会もほとんどないしということでキャンペーン中なので入っておくという感じ。今後に期待。 *P3
- 今日のさえずり - マックはセットで野菜ジュースをチョイスできるようにすべき (2008-12-12)
- 今日のさえずり - 除虫菊を栽培していただきます (2008-08-05)
- 今日のさえずり - PuTTY って「パティ」なのか (2008-09-11)
- 今日のさえずり - 停電お詫びの堂島ロール (2009-07-30)
- 今日のさえずり - 許されるのは嘘ではなくドワーフのような沈黙 (2010-02-23)
2009年8月5日 (水)
■ 今日のさえずり - モノを貰うとすぐに写真を撮る人

@ 2009年08月04日
- 06:29 起床。前回に比べて今回の第1夜は静かだった。 *P3
- 09:27 出社済み。デスクにギフトが! *P3
- 09:38 くれた人に開封を要求された。 *P3
- 10:36 Norton Internet Security 2009 インストールしたいけれど、CD-ROM ドライブが死んでる。 *P3
- 11:39 @takahrt 情報ありがとうございます。今回は別の PC のドライブからインストールしました。 *P3
- 12:19 嗚呼、今日はレッドクリフの顔出し看板がヨドバシカメラにある。ひかれる……。 #Akihabara L:秋葉原 [mb]
- 13:08 東京総合車両センターの今年の夏休みフェアは8月22日。 #Oimachi *P3
- 17:11 理解しずらい理由がわかった。vertex とするところを top とされていたからだ。 *P3
- 18:56 モノを貰うとすぐに写真を撮る人だと会社の人に思われているフシがある。 [mb]
- 19:17 帰ってからチェック。 RT @shin1x1: Twitter フォローokな人を探す「follow ok」を作りました http://bit.ly/vhWBs [mb]
- 25:40 @follow_ok [写真][カメラ][秋葉原][文房具][GTD][Linux][Debian][Perl]
- 25:57 2009年8月4日の歩行: 7681歩、6.10km、58分、6.21km/h、消費 289.0kcal、脂肪燃焼 41.3g、4.2エクササイズ。 *P3
@ 2009年08月05日
- 12:31 同僚がすれちがい通信について熱く語っている。昨日ドラゴンクエストIX買ったらしい。 *P3
- 13:42 Windows XP BOX の HDD に 21.75GB のパーティションが残っていたのに気がついて、NTFS でフォーマット中。 *P3
- 19:46 ももいろクローバーまたきてる。 [mb]
- 25:50 届出書類書いた。今回は鉛筆下書きなしで一発勝負。 *P3
- 25:51 運転免許証で本籍確認しようと思ったら最新のやつには書いてないんだった。 *P3
- 25:55 2009年8月5日の歩行: 5421歩、4.28km、42分、6.03km/h、消費 202.0kcal、脂肪燃焼 28.8g、2.9エクササイズ。 *P3
- 今日のさえずり - 夏が終わったのに黄色かよ (2009-10-02)
- 今日のさえずり - やはりルイーダの酒場には不気味さを感じる (2009-08-23)
- 今日のさえずり - 時報というやつも初めて見た (2010-01-25)
- 今日のさえずり - ソフマップの店員にヨドバシカメラの場所たずねているジイチャン (2009-09-02)
- 今日のさえずり - 待受画面が巨大仏像写真なのでビビった (2009-11-06)
2009年8月20日 (木)
■ アクセサは foo と set_foo にしたい

オブジェクト指向プログラミングではほとんどの場合に必要となるアクセサについては命名規則にいくつかのパターンがある。
- 属性名に対して getter に get (get_)、setter に set (set_) をプレフィックスとしてつける。
- getter も setter も同じ名前とし属性名にする。
- setter のみ set (set_) を属性名にプレフィックスとしてつける。
1 番目は Java プログラミングでよく使われる。 またそれ以外でも広く使われている形式だ。 get と set 命名規則的に対になっていて規則的には美しい。 getter と setter を別々に検索するのも用意だし、プログラミング時にも誤解を招きにくい。
ただし例えば x、y、z のような短い名前の属性の取得の場合 obj->get_x などと、うるさい感じになってしまう。また obj->get_foo->get_var なども obj->foo->var などに比べてすっきり感がない。
2 番目は Perl でよく使われる。C# のプロパティへのアクセサは getter と setter が同じ名前になる。 呼び出し側ではコードが短くなりすっきりする。
ただし Perl の場合は引数の数を動的にチェックするために効率が若干犠牲になるのと、setter の機能が無いアクセサに引数を渡してもエラーにならないため見逃しやすいバグが潜んでしまう可能性があるなどの問題もある。Perl ベストプラクティスではこの形式ではなく1番目の形式を勧めている。
3 番目はあまり多くないかな。 getter に get がついていると個人的には重い印象を感じる。 getter を属性名だけにすることですっきりするとともに、setter は set_ と動詞がつくことでオブジェクトに働きかけるという印象を残すことができる。
命名規則が非対称なのでちょっと気持ち悪いといえば気持ち悪い。
Google C++ スタイルガイドではこの形式を採用している。
個人的には3番目がコードの見た感じにもすっきりしていて読みやすく、また getter と setter の区別も(1番目ほどではないにせよ)つきやすいので良いのではないかと思う。 2番目もよく使っていたのだが、しばらく3番目にしてみようかと思った今日このごろ。
- 久しぶりの C++ は GNU Automake + CppUnit で (2009-03-13)
- [ WiKicker ] 無記名時のバグ修正 (2003-09-20)
- ハッシュとは (2004-06-09)
- [ WiKicker ] キャッシュまわりにバグ (2004-06-05)
- assertion (2004-05-16)
2009年8月25日 (火)
■ ActivePerl をやめて Strawberry Perl へ

ActivePerl 5.10.0.1005 + Visual Studio 2005 SP1 上で PAR::Packer を使って実行可能ファイル化したものの、今日別の環境で動かしたら「このアプリケーションの構成が正しくないため、アプリケーションを開始できませんでした」というエラーがでてしまった。
今まで Visual Studio 6.0 で PPM パッケージの作成やら PAR::Packer による実行可能ファイル化をしていたので気がつかなかったのだが、調べてみると Visual Studio 2005 以降だとどうもいろいろ面倒らしい。
ActivePerl + PPM パッケージだと自分で PPM リポジトリを用意しておくことで、開発環境の統一が楽になるという利点があったのだけれどもしばらく一筋縄ではいかなさそうなので、別の Perl ディストリビューションを使ってみることにした。
Windows 上の Perl としてしばらく使ってみることにしたのは Strawberry Perl。現在のバージョンは 5.10.0.6。 以前にもちょっと入れてみたことはあったけれども、きちんと使ってみるのは初めて。
MinGW や dmake が同梱されており、CPAN.pm を使って UNIX 上と近い感覚で Perl モジュールのインストールができる。 PAR::Packer を使って実行可能ファイル化した Perl スクリプトも実行できることを確認。
しばらく乗り替えてみることにする。
- ActivePerl で Ming (2005-02-23)
- PAR::Repository でビルド済み Perl モジュールをネット... (2006-12-12)
- ActivePerl 5.8.9 build 825 + MinGW 5.... (2009-02-22)
- bundle を作成して Perl モジュールをまとめてインストール。 (2004-10-21)
- 自前 PPM リポジトリの管理 (2006-07-03)
2009年10月23日 (金)
■ さくらのレンタルサーバ プレミアム申し込んだ

www.naney.org で使っているホスティングサービスは
という点でいろいろ遊べるのだが、
- 今の相場的にはかなり高めなのにホームが容量 100MB (メールは別に 100MB)。
- Perl が10年以上前の Perl 5.005_03。自分で新しい Perl を入れようにも容量 100MB だと厳しい。5.005_03 だと Perl v5.6 系以降の文法が使えないし、使える Perl モジュールも限定されているので悲しい。
- 夜中になると analog が動いてサーバが重くなる。
- メールの送受信が遅延することがある。
などから使いづらくなってきた。 なにより容量を気にして記事を書き控えようという心理が働くのがよろしくない。 そろそろ今後を考えて他社に乗り換えようかと。
選んだのはやはり人気があって SSH も使える「さくらのレンタルサーバ」。
選んだプランは容量 10GB のプレミアム。 スタンダードでも容量 3GB でまずまずだし cron も使えるから機能的にも十分なんだけれど、1ホストあたりの収容ユーザ数により余裕があるであろう1つ上のプランにしておいた。
Web から申し込んで、風呂に入っている間に DNS 設定が反映されて SSH ログインできるように。 順次ソフトウェアのインストール・コンテンツの移行とメールの設定をしてから、naney.org をこちらに切り替える予定。
- www.naney.org をさくらのレンタルサーバへ移転 (2009-12-23)
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- WiKicker に JSON でのページ出力機能を追加 (2007-04-03)
- 最新の Module::Install は Perl 5.005_03 ステ? (2006-04-29)
- 専用サーバに移りたい (2005-11-13)
2009年12月30日 (水)
■ Net::OAuth を使って Twitter からフィードを取得

Twitter の replies (mentions) をフィードリーダや Plagger で読めるようにするために、Basic 認証で Twitter にアクセスしてフィードをとってきてそのまま出力する Perl CGI スクリプトを書いて使っていたのだが、やはり Basic 認証が嫌なので OAuth 認証に書き換えた。
Net::Twitter モジュールだと取ってきたフィードが Perl のデータ構造になってしまいそのまま再度出力するのが面倒なので、Net::OAuth モジュールでリクエストを作って投げるようにした。
以下エラー処理等を省略したコード。
Web サイトに設置すれば(CGI スクリプト側で認証を済ませて)認証無しで replies のフィードが取れるようになるので簡単にフィードリーダで読めるようになる。
#!/usr/bin/perl -w
use strict;
use warnings;
use CGI;
use LWP::UserAgent;
use Net::OAuth;
use Data::Random qw(rand_chars);
$Net::OAuth::PROTOCOL_VERSION = Net::OAuth::PROTOCOL_VERSION_1_0A;
my $consumer_key = 'YOUR CONSUMER KEY';
my $consumer_secret = 'YOUR CONSUMER SECRET';
my $access_token = 'YOUR ACCESS TOKEN';
my $access_token_secret = 'YOUR ACCESS TOKEN SECRET';
my $url = 'http://twitter.com/statuses/replies.atom';
my $method = 'GET';
my $query = CGI->new;
my $request = Net::OAuth->request('protected resource')->new(
consumer_key => $consumer_key,
consumer_secret => $consumer_secret,
request_url => $url,
request_method => $method,
signature_method => 'HMAC-SHA1',
timestamp => time,
nonce => join('', rand_chars(ssize => 16, set => 'alphanumeric')),
token => $access_token,
token_secret => $access_token_secret,
extra_params => {count => '200'});
$request->sign;
my $ua = LWP::UserAgent->new;
my $response;
if ($method eq 'GET') {
$response = $ua->get($request->to_url);
}
else {
$response = $ua->post($request->to_url);
}
print $query->header('application/atom+xml; charset=utf-8');
print $response->content;
- 今日のさえずり - 年賀状作成特設会場とした (2009-12-30)
- Plagger で Twitter のあれこれをメールで通知 (2008-12-25)
- Twitter から「ログイン禁止中」くらった (2009-07-15)
- 今日のさえずり - くるぴかポッチャマ廻しにくい (2009-12-27)
- Twitter + Cachbook で小遣い帳 (2010-01-22)
■注目キーワード
購入 買った 発売日 フリー 無料 価格 値段 作り方 選び方 使い方 方法 設定 サンプル ダウンロード 限定 在庫 予約 穴場 比較 検証 レビュー 感想 評価 評判 使用感 使ってみた 口コミ 噂 最新 MP3 動画 意味 お薦め お勧め おすすめ 便利 Blog ブログ mixi 修理 デザイン ビックカメラProcess Time: 0.106279s / load averages: 0.18, 0.13, 0.09
nDiki by WATANABE Yoshimasa (profile)
Powered by DiKicker
Base theme by Nana (for tDiary)





◇ Twitter やってます。この記事が気にいったらぜひ twitter.com/Naney の follower になってください。