タグ

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

  • 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
  • 複雑なデータ構造は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
  • さっきの記事の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
  • モジュールがMoose依存してた。別れたい… - Unknown::Programming

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

    モジュールがMoose依存してた。別れたい… - Unknown::Programming
  • PHP5.3のnamespaceの区切り文字に関して - Unknown::Programming

    今の気持ちをはてなハイクであらわしてみました。 先に言うとなんかもう色々ごめんなさい。 PHP5.3 - はてなハイク 勘弁して下さい(つд⊂)エーン

    PHP5.3のnamespaceの区切り文字に関して - Unknown::Programming
  • 今週末の予定 - Unknown::Programming

    希望 use fbis; use Beer::PremiumMalts; my $fbis = fbis->new; $fbis->drink(Beer::PremiumMalts->new( type => 'big' )) while $fbis->stomach; $fbis->say->say->say->say; $fbis->sleep(60 * 60 * 12); 現実 use fbis; use Work::Mobile::WebApp; my $fbis = fbis->new; my $work = Work::Mobile::WebApp->new( job_type => 'infinity' ); while ( my $job = $work->next_job ) { $fbis->work($job); last unless $fbis->life--;

    今週末の予定 - Unknown::Programming
    jazzanova
    jazzanova 2008/10/03
  • 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
  • Perl Internalsについて - Unknown::Programming

    実は、Perl 5.8以降では、Internals::SvREADONLY()という関数がuseなしで使えるようになっていて、Internals::SvREADONLY($scalar, 1)で$scalarをREADONLY flagをonに、Internals::SvREADONLY($scalar, 0)でoffにできます。 404 Blog Not Found:perl - Const released -- True Readonly SUGEEEE、ってかそんなのあるなんて知らなかった。まぢで?まぢで?早速試してみた。 my $foo = 10; Internals::SvREADONLY($foo, 1); eval { $foo = 'WRYYYYYY' }; # エラーになるはず print $@ ? "error! $@" : 'not error!'; Interna

    Perl Internalsについて - Unknown::Programming
  • クラスデータをダンプしたい! - Unknown::Programming

    Class::Data::InheritableやClass::Data::Accessorとかでクラスデータを作成するのは凄く便利なんだけど、そのクラスにどれだけクラスデータが存在してるのかとがすぐには把握できないのがデメリットです。 なのでさくっとクラスデータをダンプするモジュールを作ってみました。 package Class::Data::Dumper; use strict; use warnings; use Data::Dumper (); use Class::Inspector; our $VERSION = '0.01'; our %PACKAGE = map { $_ => 1 } qw/ Class::Data::Inheritable Class::Data::Accessor /; sub target { shift; my $target_class = sh

    クラスデータをダンプしたい! - Unknown::Programming
  • 正規表現ベースのHTML::FillInForm::Lite - Unknown::Programming

    HTML::FillInFormを正規表現ベースで再実装したHTML::FillInForm::LiteってのがCPANにリリースされてます。 なかなか爽快ですね。HTML::FillInFormHTML::Parserを利用しているので無駄な部分が多かったのがデメリットだったわけで。 ドキュメントには2倍近く高速になると書いてたので一応ベンチを取ってみました。 use Benchmark qw(cmpthese timethese :hireswallclock); use HTML::FillInForm; use HTML::FillInForm::Lite; my $str = q{ <form> <input type="text" name="text_data1" value="" > <input type="text" name="text_data2" value="

    正規表現ベースのHTML::FillInForm::Lite - Unknown::Programming
  • mapで要素除去 - Unknown::Programming

    意外と知られてないかと思ったのでメモ。 grep {$_} map { $_ ? $N/$_ : undef } @_; って書くの? mapで特定要素を除外したいときとか - ロックスターになりたい mapを使って特定の要素を除去する方法ですが、上記の方法はこの用途であれば問題ないですが、undefという要素もちゃんと要素として見なしたい場合には困ります。 で、どうするかというと、mapの戻り値に空リストを返すことで要素の除去ができます。 my $n = 1000; my @array = (2, 1, 0, -1, -2); my @new_array = map { $_ ? $n/$_ : () } @array; たまーに使うので覚えておくと吉です。

    mapで要素除去 - Unknown::Programming
  • Perl Tips - Unknown::Programming

    PerlのTipsになりそうなものを過去ログから引っ張り出してみました。 ランダムな文字列を生成するString::Random - Unknown::Programming local our $hoge; - Unknown::Programming whileでファイルハンドルをループする時の暗黙の$_について - Unknown::Programming リストの要素数を取得する - Unknown::Programming Perl6::Say-0.10 - Unknown::Programming クラスメソッドのインポートをModule::Compileでやっちゃう。 - Unknown::Programming メソッド呼び出しで継承する - Unknown::Programming どう書くでリハビリ - Unknown::Programming メソッド名一覧どーかく?

    Perl Tips - Unknown::Programming
  • メソッドの引数を柔軟にするあれの件 - Unknown::Programming

    関数/メソッドのオプションを柔軟に受け渡す - Blog::koyhoge::Tech を読んで感じたことでも。 やっぱ後から引数追加とかって結構あるんで予めオプション系の引数を増やしやすいようにするわけです。 引用元の例では固定引数が一つとオプション用の引数が渡せるようになっています。 <?php function getItemsByMode($key, $options = null) // 固定引数 $key // オプション引数 $options これだとオプション引数の追加はいくらでも出来ますが、下記のように省略可能な引数を増やしたい場合に困ります。 <?php function getItemsByMode($key, $key2 = null, $options = null) // 固定引数 $key // 省略可引数 $key2 // オプション引数 $options

  • 勉強がてらCustomFeed::Pyaを作ってみた。 - Unknown::Programming

    Plaggerを触ってみようと思ってずーっと放置してたのでそろそろ手を出してみる。 とりあえず自分で何か作ってみようと思いCustomFeed::Pyaなるものを勉強がてら作ってみた。 一応、SAPPORO Today: pya! の ATOM フィード。というのがあるみたいだけどとりあえずお構いなしで作ってみる。 で色々ソースを見てみたんだけどもう、意味わかんないす。 もうわかんないんで色々参考にしながらかなり適当に作ってみました。 package Plagger::Plugin::CustomFeed::Pya; use strict; use base qw/Plagger::Plugin/; use Plagger::Mechanize; use URI::Escape; use Encode; sub register { my($self, $context) = @_; $c

    勉強がてらCustomFeed::Pyaを作ってみた。 - Unknown::Programming
  • PHPがどうにも好きになれない理由 - Unknown::Programming

    仕事PerlPHPも使うんだけど、どうにもPHPが好きになれない。 いったいなんでだろうか。先にPerlから入ったもんだから後から入ったPHPに対して不満があるのかな? ま、とにかく両方やっててPHPが微妙だなぁと思う部分を列挙してみよう。 ただPHPに関してそれほど詳しくないので間違っている部分もあるかもしれません。 あ、ちなみにここでいうPHPってのはPHP4(PHP4.4.1)のことです。 変数のtypeミス(strict 'vars') これが一番痛い。 まさしくPerlでstrictを使わずに実装してるような、そう、まるで先祖帰りしてるような感覚になってしまうので当につらい。 変数のスコープ 変数のスコープが関数単位でしか発生しないのが痛い。 これによりif条件の場合のみとかループ中でしか使わない変数とかを定義できない。 つまり、変数の存在範囲を細かく設定できないのだ。 配

    PHPがどうにも好きになれない理由 - Unknown::Programming
  • 1