タグ

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

  • 配列か連想配列かを判別する - Unknown::Programming

    PHPにおいて、ある配列が連想配列として使われているのかどうかを判別したい場合どうすればいいのか。 色々調べてたらこんな記事を発見しました。 <?php function is_hash(&$array) { return array_keys($array) !== range(0, count($array) - 1); } テレパス・ラボ : 連想配列 判定関数(is_hash) なるほど。 array_keysで配列のキー一覧を取得し、そのキー一覧が0からの連番になっているかどうかを比較すれば、対象の配列が配列なのか連想配列なのかを判別できるという理屈ですね。 確かにこれで判別ができそうです。 ですがひとつだけ気になる部分があって、array_keysやrangeを使って一時的な配列を確保しているのは無駄が多いのではないかと。 対象となる配列が大きければ大きいほどメモリ効率が悪くな

    配列か連想配列かを判別する - 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
    joan9
    joan9 2009/11/30
    > create_functionで定義される関数名の仕様が「NULL文字lambda_連番」なので、
  • ちょっとしたコードを検証するコツ - 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
    joan9
    joan9 2009/07/14
  • 複雑なデータ構造は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
    joan9
    joan9 2009/06/11
  • 日付系の処理を集約してくれるDate::Class(仮)を考えてみた - Unknown::Programming

    日付系の処理って用途によってモジュールが分かれてて非常に使いにくいと思うのんだけども。 基的にはDateTime使えばいいんだろうけど例えばカレンダーとか作るときに休日とか年号とか色々処理したいときに、 use DateTime; use Date::Japanese::Holiday; use Date::Japanese::Era; my $dt = DateTime->new(year=>2007,month=>3,day=>13); my $djh = Date::Japanese::Holiday->new($dt->year,$dt->month,$dt->day); my $dje = Date::Japanese::Era->new($dt->year,$dt->month,$dt->day); if ( $djh->is_holiday ) { print $dje->

    日付系の処理を集約してくれるDate::Class(仮)を考えてみた - Unknown::Programming
    joan9
    joan9 2008/09/22
    あとmiyagawaさんのコメントのDateTime::Calendarを見てみる
  • 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
    joan9
    joan9 2008/05/07
  • 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
    joan9
    joan9 2008/01/16
  • それTemplate::Provider::Encodingで一応できるよ - Unknown::Programming

    テンプレートShift_JISでそれ以外UTF-8の場合 - Unknown::Programmingの続き。 id:dayflowerさんに助言を頂きました。 Template::Provider::Encodingを使えばいけそうです。 Template::Provider::Encodingの存在を知ってはいたんですがてっきりテンプレートがUTF8なものを別の文字コードに変えるものだと思ってましたorz。 で使い方なんですが、テンプレートに[% USE encoding 'shiftjis' %]と書いておけばOKです。 ただテンプレート毎にUSE文を書かなければならないのが面倒ですね・・・。 まあ考え方によってはテンプレート毎に違う文字コードで書けるという利点はあるのでそれはそれでありかも。 USEしてないときのデフォルト値が今はUTF8固定なんでこれを外から変更できたらかなり使い

    それTemplate::Provider::Encodingで一応できるよ - Unknown::Programming
  • Web::Scraper使ってみた - Unknown::Programming

    id:naoyaさんが触ってるの見て面白そうなので僕も触ってみました。 Web::Scraper - naoyaのはてなダイアリー で何を取得してこよーかなーと思ったんですが、ちょーど今流行り?のFizzBuzz問題でブクマコメントがワンライナー大会になってるのでコード(っぽい)ものを取って来るやつを作りました。 #!/usr/bin/perl use strict; use warnings; use Web::Scraper; use Encode; use URI; use URI::Find; use Perl6::Say; my $url = 'http://b.hatena.ne.jp/entry/http://www.aoky.net/articles/jeff_atwood/why_cant_programmers_program.htm'; my $links = scr

    Web::Scraper使ってみた - Unknown::Programming
  • スライス&x演算子で初期化、よりもmapが好き - Unknown::Programming

    僕はmap派かなぁ。 Catalystのソースを見ていたら二項演算子スライスを使ってハッシュの初期化をしていた - kopug memo スライス&x演算子使うやり方だとmy宣言と同時に書けないからあんまり好きくない。 my %hash = map { $_ => 1 } @key; # myと同時に書ける my %hash; @hash{ @key } = (1) x @key; # myと同時に書けない もっと言えば初期化の為に@keyとかを用意しなくて済むし。 my %hash = map { $_ => 1 } qw/a b c/; 予め%hashや@keyが存在しているような状況ならスライス&x演算子使ってやることもあるけどね(元記事のCatalystのコードがまさにそう)。 ただ、x演算子で気をつけないといけないのがリファレンスを使って初期化するとき。 use Data::Du

    joan9
    joan9 2007/06/25
  • 1