タグ

ブックマーク / fbis.hatenablog.com (51)

  • Text::ASCIITableによるアスキーテーブルレイアウト - Unknown::Programming

    MySQLの出力結果みたいなのが必要になったのでCPAN漁ってたらこんなの発見。 Text::ASCIITable - Create a nice formatted table using ASCII characters. - metacpan.org 地味に凄いめちゃ便利 use Text::ASCIITable; my @rows = ( [1,'foo','2011-03-16 11:22:33'], [2,'hogehogehoge','2011-03-17 11:22:33'], [3,'uwaaaaa','2011-03-18 11:22:33'], [4,'dio','2011-03-19 11:22:33'], [5,'jojo','2011-03-20 11:22:33'], ); my $t = Text::ASCIITable->new(); $t->setCol

    Text::ASCIITableによるアスキーテーブルレイアウト - Unknown::Programming
    otsune
    otsune 2011/05/19
  • sprintfで使用する引数を直指定する方法 - Unknown::Programming

    久々にPerl。いや、ほんと久しぶりよね。 printf '%d年%d月%d日', 2010, 12, 22; # 2010年12月22日 上記のような処理の時に、引数の数は変更せずに年を削って「12月22日」と表示したい場合、以下のようにすれば可能。 printf '%2$d月%3$d日', 2010, 12, 22; # 12月22日 「%」と「d」の間に「数値$」を追加することで使用する引数を直指定できる。上記の場合だと2番目と3番目の引数を使うという感じになる。 こんなsprintfの使い方なんて滅多なことではしないと思うけど、その滅多が来ちゃったので滅多ごめん。 滅多ごめん。 # ちなみにPHPでも可能。 参考:sprintf - perldoc.perl.org

    sprintfで使用する引数を直指定する方法 - Unknown::Programming
    otsune
    otsune 2010/10/28
  • Calendar::Japanese::Holidayなるものを触ってみた - Unknown::Programming

    の祝日の名前を取得するモジュールのようです。 僕も前に自分用に同じようなヤツを作りました。 でCalendar::Japanese::Holidayなんですが、実装はさておき、実行結果に少し不満が。 というのも昔の休日が軒並みコケる。 まぁどこまで対応するかは用途によって変わるとは思うけど少なくとも、昭和23年(1948年)7月に制定された「国民の祝日に関する法律」を一番古いケースとして対応したほうがいいかと。 まずそれによると元旦は1949年〜現在の1月1日。 成人の日は1949年〜1999年の1月15日。2000年以降は1月の第二月曜日(ハッピーマンデー) 建国記念の日は1967年〜現在の2月11日。 天皇誕生日、というか4月29日の扱いが少しややこしい。 4月29日は1949年〜1988年の間が天皇誕生日、1989年〜2006年の間がみどりの日、2007年〜現在が昭和の日となる。

    Calendar::Japanese::Holidayなるものを触ってみた - Unknown::Programming
    otsune
    otsune 2010/01/04
  • List::MoreUtilsのuniq関数の実装が変わってた件 - Unknown::Programming

    大分昔に書いたHashを使って配列をユニークにしようという記事のブコメにてList::MoreUtilsのuniq関数の実装が変わったというコメントを頂きました。 List::MoreUtils 0.25_02 では少々変更されていた。 http://cpansearch.perl.org/src/VPARSEVAL/List-MoreUtils-0.25_02/lib/List/MoreUtils.pm はてなブックマーク - kitsのブックマーク / 2009年11月17日 さっそくどう変わったのか確認したところ、なんともアンビリーバボーな実装になってました。 # List::MoreUtils-0.22 sub uniq (@) { my %h; map { $h{$_}++ == 0 ? $_ : () } @_; } # List::MoreUtils-0.25_02 sub

    List::MoreUtilsのuniq関数の実装が変わってた件 - Unknown::Programming
    otsune
    otsune 2009/11/20
  • PHPの閉じタグは心の臓に悪いから使わないで - Unknown::Programming

    閉じタグってのは「?>」のことね。未だに閉じタグ使ってるコードを見ると一瞬ドキッとするんだよね。(自分の昔のコードも含むw) いや、ちゃんとわかってて確実に使いこなしてるならいいんだけどたまに -- ここがファイルの先頭 -- <?php class Foo { // いろいろ } ?> -- ここがファイルの後尾 -- みたいな感じで閉じタグの後に改行コードが一つ入ってたりするのを見ると「あわわわ」ってなっちゃう。 実際には改行一つだけなら問題は出ない、PHPは閉じタグの直後の改行を消してくれるからね。 問題は改行が二つ以上あった場合だ。これは悲惨なことになる。PHPは閉じタグ以降のデータ(というか範囲外のデータ)は全部HTMLとして出力される仕様なので、改行コードが表示されちゃう事態に。 表示されちゃうっていうのは語弊があるか、元々PHPHTMLに埋め込むための言語なのでの範囲外の文

    PHPの閉じタグは心の臓に悪いから使わないで - Unknown::Programming
    otsune
    otsune 2009/08/12
  • ちょっとしたコードを検証するコツ - Unknown::Programming

    とりあえずPerl限定のお話で。 まぁ皆同じようなことは多分してると思うのでぐだぐだと何か言うことも無いんだけど、自分流のやり方を覚書程度にメモするという意味でここに残しておきます。 まず以下のようなfoo.plを用意します。 #!/usr/local/bin/perl -w use strict; use warnings; use Data::Dumper; use YAML(); sub p (@) { local $Data::Dumper::Indent = 1; print Dumper(@_) } sub P (@) { print YAML::Dump(@_) } use Perl6::Say; use Path::Class; __END__ 自分の環境にあわせてお好みのuse文を入れておきましょう。Perl 5.10とかならPerl6::Sayはいらないですね。 ちなみ

    ちょっとしたコードを検証するコツ - Unknown::Programming
    otsune
    otsune 2009/07/14
  • C::P::Session::State::URI×HTML::Entitiesで文字化け - Unknown::Programming

    とりあえずググルと以下のような記事が。 しかし、それもコードが冗長になるので、以下の方法で対応しました。 MyApp.pm %HTML::Entities::char2entity = ( '&' => '&amp;' , # ampersand '>' => '&gt;' , # greater than '<' => '&lt;' , # less than '"' => '&quot;', # double quote ); http://www.craft-works.co.jp/blog/archives/226 まさしく同じ症状だったので上記の対処法をそのまま試したのですがそれでも化けてしまい、しぶしぶHTML::Entitiesのコードを覗いてみたところ $$ref =~ s/([^\n\r\t !\#\$%\(-;=?-~])/$char2entity{$1} || num

    C::P::Session::State::URI×HTML::Entitiesで文字化け - Unknown::Programming
    otsune
    otsune 2009/06/18
  • Perlにおける定数宣言(constant or Readonly or Attribute::Constant) - Unknown::Programming

    正直言いますと、個人的には定数って殆ど使わないんですよね。 昔はちょこちょこ使ってたんですが、最近は定数となりうる物は基的にYAML等外部ファイルに持たせて変更可能にすることが多いのでまったく使ってません。 ですがそれでもPerlで定数を使いたい時にはどーすんの?っていう時のために軽くここにまとめておきます。 言わずもかなPerl5.8にはconstantという定数を定義できる標準モジュールがあります。 use strict; use constant PI => 3.14; # 表示 print PI; # 3.14 # 上書きしようとすると・・・ PI = 3; # Can't modify constant item in scalar assignment とこのように上書きしようとするとエラーを吐いて死にます。 しかも実行時ではなく、コンパイル時にエラーを吐きます。 実はこのc

    Perlにおける定数宣言(constant or Readonly or Attribute::Constant) - Unknown::Programming
    otsune
    otsune 2009/06/13
  • 複雑なデータ構造はData::Visitor::Callbackで簡単一発変換 - Unknown::Programming

    ハッシュと配列の参照が入り交じったような複雑なデータ構造の、全value を均等に加工したかったので次の様にしてみました。 (中略) すでに似たモジュールがある気が激しくしています! ご存知でしたらぜひ教えてくださいませ。 [perl] 複雑なデータ構造のvalue を一気に書き換える方法 - harupiyoの日記 ということでData::Visitor::Callbackがズバリそれにあたるものじゃないかなーと。 use strict; use warnings; use Data::Dumper; use Data::Visitor::Callback; my $rh_testdata = { 'a' => 1, 'b' => { 'aa' => 1, 'ab' => [ 1, 2, 3, \ 'test', 5 ], 'ac' => 3, }, 'c' => 3, 'd' => 4

    複雑なデータ構造はData::Visitor::Callbackで簡単一発変換 - Unknown::Programming
    otsune
    otsune 2009/06/11
  • Path::Class::Dir-0.16のchildrenが「0」で止まる件 - Unknown::Programming

    ブログにお絵かきなんてものが増えてたので喜び勇んで描いてみた。 って前からあったっけ? タイトルまんまなんだけども、children呼ぶときの対象のディレクトリ以下に「0」って言う名前のファイル(もしくはディレクトリ)が存在してるとディレクトリ一覧が取れないのです。 コード見てみたら一目瞭然、IO::Dirのreadをwhileでぐーるぐるしてるわけですが、終了の判定を単なる真偽値で行っているため「0」というファイルがあっちゃうとそこで止まってしまうというわけです。こーゆー場合はちゃんとdefined関数使わないとね。 以下パッチ。 --- Dir.pm Fri Apr 17 18:23:50 2009 +++ newDir.pm Fri Apr 17 18:36:21 2009 @@ -164,7 +164,7 @@ my $dh = $self->open or Carp::croak

    Path::Class::Dir-0.16のchildrenが「0」で止まる件 - Unknown::Programming
    otsune
    otsune 2009/04/18
  • PHPでWebプログラムすることのある僕がstrcmp関数を使う100の理由(ぉ - Unknown::Programming

    ==の代わりにstrcmp関数で比較すると、float型とarray型を扱う場合に==を使うのとは別の問題が発生することを示しました。 そんな型が来るならstrcmp使わないよ、という意見もあるとは思いますが、来る型がわかっているなら===を使えばいいと思うんですよね。strcmpを使いたい状況が僕にはわかりません。何にせよ、「安全な==」として使うにはstring型へのキャストを熟知している必要があると思いますよ、というのが記事の主張です。strcmpは文字列同士の大小比較にしか使えないと僕は思います。 PHPで==の代わりにstrcmp関数を使うことによる問題点 - hnwの日記 記事の主張はまったくごもっともで確かにその通りなのですが、それでも僕がstrcmp関数を使う理由はint型とstring型で比較したいからなんですよねー。 実際に関数を作るとき殆ど多くの関数において、flo

    PHPでWebプログラムすることのある僕がstrcmp関数を使う100の理由(ぉ - Unknown::Programming
    otsune
    otsune 2009/02/28
  • さっきの記事のShikaのベンチのコード - Unknown::Programming

    モジュールがMoose依存してた。別れたい… - Unknown::Programming id:tokuhiromさんにベンチうp頼まれたんだけども超個人的なBenchmarkコードなのでそのままCodeReposにあげれるような代物でもないということもあり取り急ぎエントリとしてあげておきますので自由に変更しちゃってください。 #!/usr/local/bin/perl -w use strict; use warnings; package MooseBuild; use Moose; has userid => ( is => 'rw', ); has agent => ( is => 'rw', required => 1, ); sub BUILD { my $self = shift; $self->userid(90); $self->userid($self->agent-

    さっきの記事のShikaのベンチのコード - Unknown::Programming
    otsune
    otsune 2008/12/03
  • モジュールがMoose依存してた。別れたい… - Unknown::Programming

    さて毎年年末が近づくとブログ更新頻度が下がるid:fbisですが、Mooseも馴染んできたところなのでそろそろMooseに対して一言いっておくかということでね、はい。 Mooseは素晴らしい。とてもベリー素晴らしい。何より人に優しい。人間に優しい。 がっ!しかし、Mooseはまだ使うには早すぎた。ナウシカの巨神兵ばりに早すぎたんだ。 実際に組み込んでみて感じた問題点。 大きく分けて二つ。 その壱:オブジェクト生成のコスト やはりなんといってもnewのコストが高い。遅い。 一つ一つを見ればそこそこなんだけどやはりnewのコストは高い。 Mooseを使うのであれば極力newを避けるような仕組みの中に取り入れないと微妙。Catalystで例えるならsetupの時点でnewして以後キャッシュされるような実装だ。 newさえ終わればあとは(複雑なMooseの使い方をしてない限り)それほど問題ではない

    モジュールがMoose依存してた。別れたい… - Unknown::Programming
    otsune
    otsune 2008/12/02
  • Perl Quizで遊んでみる - Unknown::Programming

    Perl Quiz - package名について - Islands in the byte stream #!perl -w use strict; use Test::More 'no_plan'; sub f{ package main::Foo; } f(); is ref(bless({}, 'Foo')), 'Foo'; とか #!perl -w use strict; use Test::More 'no_plan'; sub f{ package Foo; our @ISA = ('Foo'); } f(); is ref(bless({}, 'Foo')), 'Foo'; 死ぬのは無し?でもf関数で死ぬわけじゃないから有り? #!perl -w use strict; use Test::More 'no_plan'; sub f{ }__END__ } f(); is

    Perl Quizで遊んでみる - Unknown::Programming
    otsune
    otsune 2008/10/08
  • localが何をするものかイマイチわからん - Unknown::Programming

    ということを言われたので、ふむ確かに最初はわからないだろうなと思い、ここに記録する。 まず、ある学生さんの名言にこんなのがある。 お前は1枚のCDを聞き終わったら、キチッとケースにしまってから次のCDを聞くだろう?誰だってそーする。俺もそーする つまり、変数を一時的に書き換えるということは、処理を抜ける時に元の値に戻さないといけないということなのです。 しかしコレが実は自分でやろうとすると結構面倒くさいのだ。 とりあえず実装してみよう。 use strict; our $FOO = 'value'; print $FOO."\n"; main(); print $FOO."\n"; sub main { # $FOOのバックアップ my $tmp_foo = $FOO; # $FOOを上書きする $FOO = 'overwrite value'; # 何かしらの処理 anything();

    localが何をするものかイマイチわからん - Unknown::Programming
    otsune
    otsune 2008/09/22
  • YAMLやYAML::Syckでutf8でdecodeしながら読む - Unknown::Programming

    メモ。 YAML::Syckの場合 use YAML::Syck(); my $file = 'data.yaml'; local $YAML::Syck::ImplicitUnicode = 1; my $data = YAML::Syck::LoadFile($file); $YAML::Syck::ImplicitUnicodeを使うことでデコードしながら読むことができる。 YAMLの場合 my $data = YAML::LoadFile($file); my $yaml = YAML::Dump($data); utf8::decode($yaml); $data = YAML::Load($yaml); YAML parser - Bulknews::Subtech - subtech miyagawaさんとこの記事でこう書かれてたんだけど、コレって普通にファイル読み込んだ方が

    YAMLやYAML::Syckでutf8でdecodeしながら読む - Unknown::Programming
    otsune
    otsune 2008/09/06
  • Moose触ってみてない! - Unknown::Programming

    触ってないのかよ! と、いうことで調べるだけ調べてまったくMoose使ってない僕がMooseについて思うところはぶっちゃけあんまり好きじゃあないという結論。 Class::Stdばりに興味が持てないんだよなぁ・・・。 コレはほんとーに個人的な好き嫌いの問題なんだけど基的に関数がガスガス追加されるライブラリってあんまり好きじゃないんだよね。 そのうち俺もこれだから古参のPerl使いってーのは使い物にならねーぜーとか言われる日が来るのだろうか。かつてPerl4コードを古い古いとか言っていた俺が>< 仕組みがわからないとかじゃないけどもさ・・・。CPANライブラリ達がMooseベースに変わっていってもまぁ問題ないっちゃないけども。確かにハックはしやすいからね、Moose。 ま、とかなんとか言ってそのうちやっぱり手のひらを返したようにMoooooooooooooooooooseとか言い出すかもし

    Moose触ってみてない! - Unknown::Programming
    otsune
    otsune 2008/08/15
  • AUの件名が文字化けしたのはNet::Cmdの仕業だったでござるの巻 - Unknown::Programming

    既知の事実かもしれないがハマったのでメモメモ。 こーんなシンプルなメール送信プログラムを書いたのです。 use strict; use warnings; use MIME::Lite; use Path::Class; my $mime = MIME::Lite->new( From => 'from@exmaple.com', To => 'xxxxxxxxxxxxx@ezweb.ne.jp', Subject => subject() || '', Data => body() || '', Encoding => 'base64', ); $mime->attr( 'content-type.charset' => 'Shift_JIS' ); $mime->attr( "Content-disposition" => "" ); $mime->field_order( 'MIME

    AUの件名が文字化けしたのはNet::Cmdの仕業だったでござるの巻 - Unknown::Programming
    otsune
    otsune 2008/07/02
  • Catalyst、というかCPANの話 - Unknown::Programming

    ふむ。ただしこれを機にモジュールを公開することに億劫になって欲しくはないなぁ。なんか前にどっかでCPANの公共性について話題があったけどそーゆー方面には行って欲しくなかったり。 http://b.hatena.ne.jp/fbis/20080605#bookmark-8845759 Catalystって、ごく初期の時代はともかく、いまはだれもが認める開発チームが管理しているもの。そのチームのメンバーが、乱立するプラグインにうんざりして「もうやめれ」と政治的なコメントを出しているのに、それを無視してプラグインにこだわることにいったいどういうメリットがあるの? CPANは幼稚園児の砂場じゃないよね - Charsbar::Note いや、まあプラグインにはまったくこだわってはないんですが、取り上げられたので軽く一言。 僕の場合、昔誰かが「CPANってもっと気軽にうpっていいものなんだよ!」と言

    Catalyst、というかCPANの話 - Unknown::Programming
    otsune
    otsune 2008/06/06
    obsoleteなのは消しちゃう。履歴も見れるし。というのが良いのかな。
  • Perlが初めての人に教えてあげたいちょっとしたこと - Unknown::Programming

    タイトルは釣りです。 実際のタイトルは「Perlのオブジェクト指向がムズカシイだって?んなバカな。だったらPHPで再現してやんよ!」でございます。 ヘイヘイヘイ。そこの君。Perlのオブジェクト指向が難しいだなんていったい誰が言ったんだい? Perlのオブジェクト指向ほど、シンプル且つ柔軟なものはないよ! 単なるパッケージ(名前空間)とリファレンス(データ)をblessという関数で紐付けただけのもなんだから。 第一引数に必ず$selfが来るっていうのも結局の話たんなる関数呼び出しとなんら変わらないのだから。 package Foo; sub new { my $class = shift; return bless { @_ } , ref $class || $class; } sub plus { my $self = shift; my $int = shift; return $s

    Perlが初めての人に教えてあげたいちょっとしたこと - Unknown::Programming
    otsune
    otsune 2008/05/30