タグ

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

  • 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
    kamipo
    kamipo 2012/08/08
  • 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
    kamipo
    kamipo 2011/12/21
  • 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
    kamipo
    kamipo 2010/10/28
  • hasで定義したメソッドのオーバーライドについて - Unknown::Programming

    defaultだけ上書きとかできないのかな? package Foo; use Moose; has foo => ( is => 'rw', lazy => 1, default => sub { 100 } ); package Bar; use Moose; extends qw(Foo); # isとlazyを引き継いで欲しい! has foo => ( default => sub { 200 } ); 派生先でdefaultだけ上書きしたいんだけどそーゆーのはできない? やっばhasの定義をBarに全コピーするのがいいのかなぁ。でも定義が重複するのがやだな・・・。triggerとかが二重化しちゃうし。 んー他にはこうするとか? package Foo; use Moose; has foo => ( is => 'rw', lazy => 1, default => sub {

    hasで定義したメソッドのオーバーライドについて - Unknown::Programming
  • PHPの閉じタグは心の臓に悪いから使わないで - Unknown::Programming

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

    PHPの閉じタグは心の臓に悪いから使わないで - Unknown::Programming
    kamipo
    kamipo 2009/07/17
  • 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
    kamipo
    kamipo 2009/06/17
    見ての通り「&」で呼び出した関数は展開されてないことがわかる。
  • 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
    kamipo
    kamipo 2009/04/14
  • ||=とdoを使ってキャッシュ - Unknown::Programming

    たとえばメンバ変数にオブジェクトとかをキャッシュするときに、 sub method { my $self = shift; return $self->{hoge_obj} ||= Hoge->new; } とか良くやるんだけど、前処理とかが必要な場合はdo使って sub method { my $self = shift; return $self->{hoge_obj} ||= do { ### 前処理 Hoge->new; }; } こんな感じで良くやるんだけどもコレって一般的なのかな? 前にどっかのソースで、 sub method { my $self = shift; my $code = sub { ### 前処理 return Hoge->new; }; return $self->{hoge_obj} ||= $code->(); } っていう感じのを見たんだけどどっちがい

    ||=とdoを使ってキャッシュ - Unknown::Programming
    kamipo
    kamipo 2008/12/08
    do派
  • DBD::mysqlのmysql_auto_reconnectが真だとDB再接続時にDBICのon_connect_doが実行されない件 - Unknown::Programming

    ハマったメモ。 さてまた今回も若干適当な記事だけども、メモということでお許し願いたい。 ってか誰も言及してないっぽいんだけどもしかしてこの現象うちだけ? とにかくタイトルの通りで、検証時の各モジュールのVERSIONは以下の通り。 DBD::mysql-v4.005 DBIx::Class-v0.08100 前回のDBD::mysqlでSegmentation faultの件は無事解決したものの、今度はDB再接続時に文字化け発動でゲンナリしてました。 でログとか見てるとどうもDBICのon_connect_doで指定しているSET NAMES UTF8がDB再接続時に動いてないことが判明。 myapp_server.plだとちゃんとSET NAMES呼ばれるんだけどmod_perlだと何故か呼ばれない。 ってことでmod_perlに関係有りそうな部分をひたすら調べていたところ、mysql_

    DBD::mysqlのmysql_auto_reconnectが真だとDB再接続時にDBICのon_connect_doが実行されない件 - Unknown::Programming
  • Catalyst::Plugin::Session::State::URIと携帯端末とfragment付きリンク - Unknown::Programming

    C::P::Session::State::URIは便利なんだけどfragmentが付いてるリンクまでセッションIDを埋め込んでしまうので微妙。 なんでかっていうとDoCoMo等、クエリとfragmentが存在する場合、ページ内リンクにならずにページ遷移してしまうんだよね。 ちなみにfragmentってのは以下のようなものね。 <a href="#">foo</a> 動画のダウンロードとかでオブジェクトタグ使ってるとダウンロードできなくなってしまうので困った困った。 なのでfragment付いてる時はセッションIDを埋め込まないようにするモジュールを作った。 package MyApp::Session::State::MobileURI; use strict; use warnings; our $VERSION = 0.01; sub session_should_rewrite_u

    Catalyst::Plugin::Session::State::URIと携帯端末とfragment付きリンク - 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
    kamipo
    kamipo 2008/10/07
  • Perlのinstanceof演算子のベストプラクティスは何か - Unknown::Programming

    instanceof演算子 - Islands in the byte stream 確かに遅いですよねぇ。 ただ、一応ベンチとってみたところ、blessed使うのが一番早かったです。 以下、$xがオブジェクトの場合のベンチ。 use Benchmark qw(cmpthese timethese :hireswallclock); my $x = bless {} , 'Foo'; my $class = 'Foo'; cmpthese(100000,{ ref_eval => sub { if ( ref($x) && eval { $x->isa($class) } ) {} }, scalar_util => sub { if ( Scalar::Util::blessed($x) && $x->isa($class) ) {} }, param_util => sub { if

    Perlのinstanceof演算子のベストプラクティスは何か - Unknown::Programming
    kamipo
    kamipo 2008/09/29
  • Catalyst+mod_perl2+DBIC(DBD::mysql-v4.008)でSegmentation fault - Unknown::Programming

    なんか良く分からんけどSegmentation faultが出て泣きそうだったんだけどやっと原因がわかったっぽい感じなのでメモしとく。 とりあえず環境は下記 CentOS 5.2 Apache 2.2.9 Perl v5.8.8 mod_perl 2.0.4 MySQL 5.0.51b 現象としてはサイトを数時間放置してアクセスすると必ずセグるというもので、当初は何がなんだか分からないL状態でした。 で、coreファイルを解析したところ、 Program terminated with signal 11, Segmentation fault. #0 0x048be024 in mysql_send_query () from /usr/local/mysql/lib/mysql/libmysqlclient.so.15 というメッセージが。どうやらmysqlに問題があるっぽいことがわか

    Catalyst+mod_perl2+DBIC(DBD::mysql-v4.008)でSegmentation fault - Unknown::Programming
  • Catalyst::Model::なんとかAdaptor系の話 - Unknown::Programming

    Catalyst::Model::MultiAdaptorでlifecyle support - dann's blog - # やりたいことがいつの間にかできていた - 僕ト云フ事@はてな出張版 この辺の記事を見てて思ったこと。 Catalyst::Model::Adaptorは便利だけど、モジュールの数だけモデル化用のファイルが増えるのも微妙という話。 そこでCatalyst::Model::DynamicAdaptorやCatalyst::Model::MultiAdaptorとかでその辺を解決という話なんだけど、 パッケージ以下全部を読み込みって言うのが僕の今回の用途に合わないので、個人的にこんな感じで書けたらいいのかなぁという案だけちょっと考えてみた。 __PACKAGE__->config( package => { 'TestApp::Service::*' => { lif

    Catalyst::Model::なんとかAdaptor系の話 - Unknown::Programming
  • DBIx::Class::Storage::DBI::ReplicationにてMasterで参照クエリを発行する方法 - Unknown::Programming

    DBIx::Classのちょっとしたメモ、その2。・・・と、思いきや長くなったので一記事に。 Masterで参照クエリを発行する方法なんだけど、ちょこちょこと調べて見たけど情報が殆どないのね。 ただみんな色々考えているようで、例えば use Blog::Schema; my $schema = Test::Blog::Schema->connect("dbi:SQLite:$master"); # set slave data sources. $schema->slave_connections( ["dbi:SQLite:$slave_1"], ["dbi:SQLite:$slave_2"], ); # do something in slave connection. $schema->slave->resultset('Entry')->find(1); DBIx::Classでス

    DBIx::Class::Storage::DBI::ReplicationにてMasterで参照クエリを発行する方法 - Unknown::Programming
  • Catalyst::View::MobileJpFilterを使ってリダイレクト時にもguid=ONを付ける方法 - Unknown::Programming

    Catalyst::View::MobileJpFilterでのHTML::MobileJP::Filter::DoCoMoGUIDなんですが、文のURLに対してはguid=ONを付けてくれますが、リダイレクトするときには付いてくれません。 なのでとりあえず自分でつけましょう。 とはいえ sub hoge : Local { my ($self, $c ) = @_; my $url = URI->new('/hoge'); $url->query_form({ guid => 'ON' }) if $c->req->mobile_agent->is_docomo; $c->res->redirect( $url ); } とか毎回書くのも超メンドウなので、何処かで自動的に入れてあげるのがベストです。 とりあえず僕のケースではMyApp::View::MobileJpFilterでやるこ

    Catalyst::View::MobileJpFilterを使ってリダイレクト時にもguid=ONを付ける方法 - Unknown::Programming
  • そういやURIモジュールって何でHashベースじゃないんだろう - Unknown::Programming

    URIモジュールってのは凄く便利なのでみんな重宝してるんだけどアレってスカラリファレンスのblessなんだよね。 いつも思うのが何でハッシュリファレンスにしなかったのかなーってこと。 まぁURIモジュール自体、かなり汎用的なモジュールなのでスカラの方がデータ構造をあれこれ考えなくても良い分、楽だったのかもしれない。 とはいえ実際問題、URIモジュールの使用用途ってURI::httpがその殆どを占めてると思うのでちょっくら適当にHashベースのURI::httpを実装してみた。もちろん全部じゃなくていくつかのメソッドだけね。 package URI::Hash::http; use Moose; use URI(); use URI::Escape(); use overload ( fallback => 1, '""' => sub { shift->as_string }, '=='

    そういやURIモジュールって何でHashベースじゃないんだろう - Unknown::Programming
    kamipo
    kamipo 2008/08/29
  • Moose触ってみるよ! - Unknown::Programming

    触るんかい! と、言うことで使ってないうちからあれこれ言うのは愚の骨頂ってことでちょっち実務で使ってみるね!少しだけだけど。 でいつもの事ながら組み込むとなればやはり気になるのがパフォーマンス。もう散々書かれてるけど自分で試さないと気がすまないのでベンチ。 #!/usr/local/bin/perl -w package UseMoose; use Moose; has userid => ( is => 'rw' ); has agent => ( is => 'rw', isa => 'Defined' ); sub BUILD { my $self = shift; $self->userid( 90); $self->userid( $self->agent->user_id ) unless $self->agent->is_non_mobile; } package NoMoo

    Moose触ってみるよ! - Unknown::Programming
  • URIモジュールのメモ - Unknown::Programming

    各種メソッドの挙動。 use URI; use Data::Dumper; sub p { local $Data::Dumper::Indent = 1; print $_[0]; print Dumper($_[1]); } my $url = 'http://example.com/foo/bar/00000.html?uid=aaaa&hoge=あああ'; my $uri = URI->new($url); p 'scheme :',$uri->scheme; p 'opaque :',$uri->opaque; p 'path :',$uri->path; p 'fragment :',$uri->fragment ; p 'as_string :',$uri->as_string; p 'canonical :',$uri->canonical; p 'authority :'

    URIモジュールのメモ - Unknown::Programming
    kamipo
    kamipo 2008/07/17
  • 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
    kamipo
    kamipo 2008/07/04
    Internals::SvREADONLY