タグ

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

  • $_[0]の謎は偶然の産物 - Unknown::Programming

    勘違いしてしまうのしょうがないね。 また、ワーク変数にリファレンス値を代入後、デリファレンスすると元の値にアクセスが出来ます。 しかし、$_[0] を直接デリファレンスした $$_[0] では、元の値にアクセスが出来ません。 ワーク変数と$_[0]の中身は、同じリファレンスが入っているにも関わらず、そうなるのです(謎)。 Perlの関数引数 $_[0]の謎 - 燈明日記 元記事の現象とは下記のようなコードを書いた時の話ですが、 use strict; sub hoge { print $$_[0]; } my $str = 'aaa'; hoge(\$str); これを実行してもprintで何も出力されないというわけですね。 実はこれ、謎でもなんでもなくて単にデリファレンスの優先順位が配列参照よりも低いから起こってるだけです。 つまり上記のコードは@_の0番目の要素をスカラデリファレンスし

    $_[0]の謎は偶然の産物 - Unknown::Programming
    mattn
    mattn 2009/10/10
  • Path::Class-0.17 - Unknown::Programming

    Path::Classが約2年半ぶりくらいにバージョンアップされました。 Path-Class-0.17 - Cross-platform path specification manipulation - metacpan.org いくつかのバグ修正や最適化が行われたようです。 そして!!! 先日僕が指摘した Path::Class::Dir-0.16のchildrenが「0」で止まる件 - Unknown::Programming この件に関してもRTチケットの方で返事があり、「Fixed in 0.17 added」と書かれていたのでキタキタキタキタ━━━(゚∀゚≡(゚∀゚≡゚∀゚)≡゚∀゚)━━━━!!ということで喜び勇んで実行させてみたところ見事に「0」で止まってしまいましたorz 工エエェェ(´д`)ェェエエ工 Fixedって言ったじゃん。 どうしよ・・・・。 またチケット追加

    Path::Class-0.17 - Unknown::Programming
    mattn
    mattn 2009/06/16
    良くある事(私は...orz)
  • さっきの記事の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
    mattn
    mattn 2008/12/02
  • モジュールがMoose依存してた。別れたい… - Unknown::Programming

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

    モジュールがMoose依存してた。別れたい… - Unknown::Programming
  • 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
    mattn
    mattn 2008/10/08
  • 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
    mattn
    mattn 2008/07/01
  • 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
    mattn
    mattn 2008/06/27
  • 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
    mattn
    mattn 2008/05/29
  • Hello Worldって、ちょ、ま。 - Unknown::Programming

    で、バトンははてブのid callでまわしとくのでよろしく>各位 404 Blog Not Found:perl - Hello World! バトン ちょw IDコール飛んできたけどちょっとおかしくね? otsune、miyagawa、takesako、yappo、fbisって俺だけ完全に浮いてるじゃ・・・。 ま、まーいー。折角弾さんからのご指名なのでなんか書こう。 ・・・とはいえ、既に弾さんの方で「リストA」から「リストF」まで6つのHelloWorldパターンを書いておられるので正直もう僕ごときが出せるネタがありません。 なので「リストG」は弾さんに実装してもらおうと思います。 use Web::Scraper; use URI; my $list_map = { A => 0, B => 1, C => 2, D => 3, E => 4, F => 5, G => 6, }; m

    Hello Worldって、ちょ、ま。 - Unknown::Programming
    mattn
    mattn 2008/05/07
  • 正規表現ベースの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
    mattn
    mattn 2008/02/18
  • 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
    mattn
    mattn 2008/01/16
  • overloadと再blessの問題 - Unknown::Programming

    overload が無効? - Practice of Programming 軽く調べてみたんですが、どうやらオブジェクトを再blessした場合、overloadフラグが立たないケースがあるようです。 具体的に言うと、overloadを使用しないオブジェクト$mが、overloadを使用しているクラスに再blessした場合、$mにはoverloadフラグが立つが$mをコピーした別のリファレンスにはoverloadフラグが立たないということです。 あー、ややこしい。こーゆーのは文章で説明するよりもコードを見た方がわかりやすいってことで以下コードで説明。 まずoverloadフラグが立つケース use Mortal qw/:all/; use strict; my $m = bless {}, "main"; bless $m , 'Mortal'; print $m; # This obj

    overloadと再blessの問題 - Unknown::Programming
    mattn
    mattn 2007/12/12
  • 1