タグ

ブックマーク / dayflower.hatenablog.com (11)

  • use utf8 環境下で => オペレータの左辺が UTF8 flag on になってしまう - daily dayflower

    use strict; use warnings; sub Dump { @_ = map { sprintf "'%s'(%s)", $_, utf8::is_utf8($_) ? 'utf8' : 'bytes' } @_; print {*STDERR} join(q{, }, @_), "\n"; } no utf8; Dump( foo => 'bar' ); #=> 'foo'(bytes), 'bar'(bytes) no utf8; だもんで,両者とも bytes なのは,まぁあたりまえ。 ところが,これを use utf8; で動かすと…… use utf8; Dump( foo => 'bar' ); #=> 'foo'(utf8), 'bar'(bytes) foo の UTF8 flag が on になってる! use utf8 にしてたので,任意の文字列リテラルが

    use utf8 環境下で => オペレータの左辺が UTF8 flag on になってしまう - daily dayflower
    yokochie
    yokochie 2009/02/04
    UTF8 flagにはまると抜け出すのが大変
  • Perl XS メモ - typemap と MAGIC をからめて - daily dayflower

    id:tokuhirom さんが http://d.hatena.ne.jp/tokuhirom/20081209/1228829454 で下地をつくってくださったので(perl-users.jp むけまとめも期待してます),ちょっとアドバンスドな話題を。 例題 http://www.sra.co.jp/people/m-kasahr/eb/ http://www.sra.co.jp/people/m-kasahr/eb/ の Perl binding を開発するとしましょう。 http://www.sra.co.jp/people/m-kasahr/eb/ の使い方は,たとえば次のような感じです。 EB_Book *book_pointer; book_pointer = (EB_Book *) malloc(sizeof(EB_Book)); eb_initialize_book(bo

    Perl XS メモ - typemap と MAGIC をからめて - daily dayflower
  • UTF8 フラグあれこれ - daily dayflower

    UTF8 フラグについてわかってるつもりだったんですが,utf8::is_utf8 considered harmful - Bulknews::Subtech - subtech を読んで混乱したので,自分なりにまとめてみました。間違いがありましたらご指摘よろしく。 まとめ スカラー変数の内部表象の状態を示すものとして UTF8 フラグというものがある スカラー変数は(リファレンス等は別として)下記のものを格納できる (A) 文字列(内部表象: UTF-8) (B) 文字列(内部表象: ISO-8859-1) (C) バイナリ列 純粋なバイナリストリーム(画像ファイル等)かもしれないし, UTF-8 octet stream かもしれないし, CP932 octet stream かもしれないし,etc, etc ... Perl は(後方互換性確保などの理由から)ISO-8859-1

    UTF8 フラグあれこれ - daily dayflower
  • テキストの文字種分割の補足 - daily dayflower

    Perl で日語テキストを簡単に字種かたまりに分割できないかな、 と思い、perlunicode を読みながらサンプルプログラムを書いてみました。 対象テキストは UTF-8Perl で日語テキストを字種分割 たつをさんは,m// でマッチングさせて分割させてますけど,これだと正規表現で網羅されてないトークンが失われてしまうと思います。 #!/usr/bin/perl use strict; use warnings; use utf8; binmode \*STDOUT, ':utf8'; my $src = <<"END_DATA"; zーあyxルーラでう、う9 10AB.DE「"GH'」★で漢字をカ・ナったー!?MJD39\x{2466}。 END_DATA print $src, "\n"; my @cs = ( $src =~ m/ ( \p{M}+ | \p{N}+

    テキストの文字種分割の補足 - daily dayflower
  • svk の shell が欲しい - daily dayflower

    と思って探したら,ありました。 svk使ってると「svk st」→「svk di」→「svk ci ファイル名 -m ほげほげ」とかよくやるんですが、「svk」の部分がDRYじゃないと思ったので超簡易SVKシェルを作ってみましたよ。 いちいち「svk なんちゃら」って打つのが面倒な人のためのSVKシェル - Greenbear Diary Ruby 使って readline と system を利用してます。のでびっくりするほどシンプル。 2008/01/25 追記: yhara さんがさらに発展させた Reposh というシェルをリリースなさってます。 んで,svk はせっかく Perl で書かれていますし,モジュールもあるので,Perl で書いてみました。まるでシンプルじゃなくなってしまった罠。 Term::ShellUI は神! でも,このスクリプトのままだとファイル名補完とか使えな

    svk の shell が欲しい - daily dayflower
  • DBIC::Schema で昔やっていたこと - daily dayflower

    Yappo さんのYappoLogs: DBIx::Class::Schemaの使い方 を読んで,空気を読まずに自分語りしたくなったので書きます。 最近めっきり DBIC 使っていないんで*1アレですが,make_schema_at とか知らない(というかおそらく存在しなかった)時代にやっていた方法。 当時のターゲット DBMS は PostgreSQL でした。 DBDesigner4 でスキーマをデザインする DBDesigner4 で MySQL 用の SQL をエクスポートする SQL::Translator で上記 SQL 文から PostgreSQL 用の SQL を作成→DB作成 SQL::Translator で上記 SQL 文から DBIC::Schema 継承クラスの HogeHoge::Schema を作成 HogeHoge::Schema::Relations とい

    DBIC::Schema で昔やっていたこと - daily dayflower
  • YAPC::Asia 2007 1 日目の感想 - daily dayflower

    YAPC 初参加。たぶん出席した方々にしかわからないメモ書きです。 全般 はてなガムもろた かなり前列のほうに座ってたんですが,プロジェクタが見づらかったのはフォーカスがあってないのか眼鏡の度がずれてきたのか Ingy a.k.a. Mr. Net の [謎] Kwiki は svn でアプリケーション全部配布とのことですが,XS モジュールとかは無視なのか全アーキテクチャ分ビルドするのか;あと環境によってインストール後が変わるモジュールもあるような Amazon Web Service Evangelist さんの Xen 等の Full / Para Virtualization より OS Level Virtualization のほうが向いているような サービス/アプリケーション間の粗結合大事,につながるのかな m.j.d. さんの あんまり Perl に限定されないような…と思

    YAPC::Asia 2007 1 日目の感想 - daily dayflower
  • PoCo::HTTP で Comet チャットサーバを作る - daily dayflower

    せっかくのイベントドリブンフレームワークな POE ですから Comet でチャットをやってみようかと。ありきたりですが。 POE::Component::* でウェブサーバを立ち上げられるのは現在のところ, POE::Component::Server::HTTPServer POE::Component::Server::SimpleHTTP POE::Component::Server::HTTP の3つがあります。1番目は最近 inactive なのでパス。2番目は「イベントフレームワーク」への馴染みはいいんですが「Simple」じゃなくなってます。3番目はコールバック関数を登録するというお気楽スタイルなんですがちょっと雑な感じ。 今回は楽をするために3番目の PoCo::HTTP を使ってみたいと思います。id:naoya 氏も最近紹介してましたし。 URI の設計指針は, チャ

    PoCo::HTTP で Comet チャットサーバを作る - daily dayflower
  • Perl と YAML - daily dayflower

    そもそも,YAML::Syck 自体の将来性が微妙なんですが, http://digit.que.ne.jp/work/index.cgi?Perl%e3%83%a1%e3%83%a2%2fYAML%2fPyYAML%e3%81%aePerl%e7%a7%bb%e6%a4%8d%e3%83%97%e3%83%ad%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%ef%bc%882006%2e08%ef%bc%89 http://digit.que.ne.jp/visit/index.cgi?2006%c7%af9%b7%ee#pYAML%282%29 の内容を軽くまとめると, YAML.pm (by Ingy) は古い。バグがありサブセットである。 YAML::Syck (by Audrey) は速いが,バグがありかなりサブセットである。 Python には PyY

    Perl と YAML - daily dayflower
  • テンポラリファイル - daily dayflower

    id:shag さんの日記(Perl での secure な一時ファイルの取り扱い - shag の日記, IO::File::new_tmpfile() - shag の日記)と perlfaq5 をベースに私家版まとめ。 テンポラリファイルの作り方 3 選 IO::File の new_tmpfile(割と昔からあるらしい?) open の 第3引数に undef を指定する(Perl 5.8 以降のフィーチャー) File::Temptempfile(Perl 5.6.1 以降で標準添付) 2 はこんなの↓ open my $tmp, '+>', undef or die $!; 1 と 2 は実質同じ。PerlIO_tmpfile() を下位 xs サブルーチンとして利用しており, win32 の場合 FILE_FLAG_DELETE_ON_CLOSE フラグ付きで開くので

    テンポラリファイル - daily dayflower
  • SQL::Abstract かしこす - daily dayflower

    以前「DBICで当に困ったら SCALAR REFERNCE を使え - daily dayflower」にて, DBIC で WHERE field1 IS NOT NULL な検索をしようと思って, …… $resultset->search({ field1 => \'IS NOT NULL' }); とか書いていたんですが, $resultset->search({ field1 => { '!=', undef } });でよかったのでした。 $resultset->search({ field1 => undef });が WHERE field1 IS NULLというのは知っていたんですが,'!=' をつけるときちんと「IS NOT NULL」に変換してくれるとは(SQL::Abstract の 714 行目あたりのロジックとしてちゃんとありました)。これでスカラーリファレ

    SQL::Abstract かしこす - daily dayflower
  • 1