タグ

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

  • Rubyのお勉強第4回、クラスの判別編 - Unknown::Programming

    さて、前回Rubyの勉強記事を書いてからなななんと約2年程たつわけですが、そんなことはさておき久しぶりに勉強日記をつけてみます。 ある変数が何のクラスであるかを判別する処理を書くときにどう書けばいいのか迷ってます。 Perlで言うところの、 if ( ref $hoge eq 'Foo' ) { } って処理のことです。 で、一応instance_of?ってのを発見。 # hoge変数がハッシュクラスであれば if hoge.instance_of?(Hash) end これでバッチグーだと思ったのですが、二つの点で問題がありました。 まず、instance_of?に渡す引数は定義済みのクラスで無いといけない点。 # Fooクラスが定義されて無いので、 #「uninitialized constant Foo (NameError)」という例外発生 if hoge.instance_of?

    Rubyのお勉強第4回、クラスの判別編 - Unknown::Programming
  • 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
    rightgo09
    rightgo09 2012/09/17
    定数についてすばらしいまとめ
  • PHP「"0x0A" == "10"はTRUEですがよろしいですか」 - Unknown::Programming

    ぼく「えっ」 PHP「"0x0A" == "10"はTRUEになりますが」 ぼく「いえFALSEです」 PHP「えっ」 ぼく「えっ」 PHP「まだ比較したことがないということでしょうか」 ぼく「えっ」 PHP「えっ」 ぼく「変化するってことですか」 PHP「なにがですか」 ぼく「型が」 PHP「ああ文字列でも整数っぽい文字列なら自動で型変換されますよ」 ぼく「そうなんだすごい」 PHP「では比較いたしましょうかTRUEですよ」 ぼく「でも"0x0A"は明示的にキャストしたら0になりますよね」 PHP「えっ」 ぼく「えっ」 PHP「ああ16進数のことなら比較の場合のみ10進数に自動で変換してから比較するんですよ」 ぼく「なにそれこわい」 PHP「"0x0A" == "+000010.0000000000000001"の場合もTRUEになります」 ぼく「なにそれもこわい」 PHP「えっ」 ぼく

    PHP「"0x0A" == "10"はTRUEですがよろしいですか」 - Unknown::Programming
  • リストの要素数を取得する - Unknown::Programming

    配列ではなくてリストの要素数を取得するのにはどうすればよいか?というお話。 まず配列の場合はスカラコンテキストで評価するだけなんでとても楽。 my @data = qw/ a b c d /; my $count = @data; # 4 ではリストの場合はどうなるか? 配列と同じように書くなら my $count = qw/ a b c d /; こうなるが、これは大間違いである。 リストをスカラコンテキストで評価すると最後の要素が返ってくるのでこの場合$countには「d」が入る。 とするならば一度配列で受け取り、その後にスカラコンテキストで評価するのが一番スマートなのかもしれない。 my $count = my @tmp = qw/ a b c d /; # 4 しかしながら要素数を取得するだけなのに@tmpを広いスコープに置くのが嫌なのであればdoを使って囲ってしまうのが吉であろう

    リストの要素数を取得する - Unknown::Programming
  • Unknown::Programming

    3年ぶりの更新というわけで、まさしく3年寝太郎状態なわけですが。 今日は今巷を賑わせているJSON SQL Injectionについてです。 DeNA Engineers' Blog [ Technology of DeNA ] JSON SQL Injection、PHPならJSONなしでもできるよ | 徳丸浩の日記 徳丸さんの記事で紹介されていたように、僕が作ったSQL_Abstractでも同様の問題が発生するとのことです。 SQL::Makerのようにstrictモードを導入するかどうかも一応考えたのですが、PHPSQL_Abstract自体PHP5でも動作はしますがPHP4時代のコードですし、そもそもそんなに使われてないだろう(泣)いうことで今回は見送ることにしました。(ちょっと今すぐ時間が取れないという状況もありまして・・・) またstrictモードを導入したとしてもSQL_A

    Unknown::Programming
  • mapと非破壊 - Unknown::Programming

    http://d.hatena.ne.jp/kazukichop/20080124/1201146190 Perl分かってない - Lism.in * blog - nekoya (id:studio-m) あんまり元記事とカンケイなかったりするけど、一応。 print join "\n" , map { s/a/A/g; $_ } @list; この書き方は@listを破壊してしまう。 無論、破壊されても構わない場合はこれでもいいが、mapを使っているということは基的には破壊されたくないはずだ。(でしょでしょ?) 破壊させる目的ならば個人的にはforeachを使う方がいいと思ってる。 s/a/A/g foreach @list; print join "\n" , @list; ま、それでもmapを使って値を変更しつつ@listを破壊したくないのであれば print join "\n"

    mapと非破壊 - Unknown::Programming
    rightgo09
    rightgo09 2010/09/14
    map
  • 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
  • 1