Perlとperlに関するperlcodesampleのブックマーク (1,930)

  • Acme::Don't 2.0! - Islands in the byte stream (legacy)

    Acme::Don'tというモジュールがある。これが提供するdon't{}は,Perl組み込みのdo{}とは逆に,ブロックの中身を実行しない。たとえば以下のコードのように使う*1。 use Acme::Don't; don't{ print "Hello, world!\n"; # => 実行されない }; これは問題ない。まさにその通りで,予想通りの振る舞いといえる。しかし,don't{}を入れ子にすると話が変わってくる。 use Acme::Don't; don't{ don't{ print "Hello, world!\n"; # => ??? }; }; 現状では何も実行されないが,これは予想通りの振る舞いといえるか。2重否定は肯定になってしかるべき,つまり"Hello, world!\n"を印字してしかるべきではないか。 そこで,ブロックが与えられたとき通常は実行されず,二重否

    Acme::Don't 2.0! - Islands in the byte stream (legacy)
  • Memcached を勉強しなおしている - @kyanny's blog

    追記 http://mt.endeworks.jp/d-6/2008/09/cachememcachedfast-libmemcache.html というツッコミが。 Cache::Memached::Fast と libmemcached について 100% 間違ったことを書いていたので修正。ありがとうございました。 memcached-tool の存在は知っているけど結果の読み方がわからない libmemcached とか「なんか memcached 関連の新しくていいものらしい」ってことしか知らない ketama? あーケタマねアレはいいよね、ところでべられるんだっけ? こういうのはよくないので勉強しなおしている。 まずはひたすらぐぐって mixi の中のひとたちが書いた記事などを読みあさる。 -f オプションの factor が、効率良くメモリを使ってキャッシュさせる鍵になりそう

    Memcached を勉強しなおしている - @kyanny's blog
  • Cache::Memcached::Fast != libmemcached - D-6 [相変わらず根無し]

    Cache::Memcached::Fast != libmemcached 違うよ、全然違うよ http://d.hatena.ne.jp/a666666/20080926/1222368070 Cache::Memcached::Fast が libmemcached を利用した Perl のクライアントライブラリ Memcached::libmemcached が、libmemcachedのPerlバインディング。Cache::Memcached::libmemcachedは、Memcached::libmemcachedの、Cache::Memcached互換インターフェース。 Cache::Memcached::FastはXSに直接自前のmemcache クライアントを実装してる。 環境に合えば、一番単純性能が速いのはlibmemcached。FastのほうがPerl向けにチュー

  • SQLite::ExplainPP -- sqlite3 の explain 文の出力の整形モジュール - Tociyuki::Diary

    SQLite3 の SQL 文のオプティマイザがどのようにループの最適化をおこなったのかをてっとり早く調べるには、SQL コンパイラが生成した仮想データベース・エンジン(VDBE)のアセンブラのソースをEXPLAIN 文を使って眺めるのが早道です。なのですが……、EXPLAIN 文の出力のままでは、オペランドの種類がわかりにくい上に、ジャンプ先がどこにあるのか一目では見当がつきません。 そこで、EXPLAIN 文の出力を整形して可読性を上げる Perl モジュールを書いてみました。ただし、VDBE は SQLite のバージョンが上がるにつれて変化しており、全部に対応するのはめんどくさいので SQLite3 の 3.0.0 から 3.5.4 に限定しました。ちなみに、私が日常的に使用している環境では、Ubuntu Linux 8.04LTS に付属のバージョンが 3.4.2 で、MacOS

    SQLite::ExplainPP -- sqlite3 の explain 文の出力の整形モジュール - Tociyuki::Diary
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • Sub::AutoでAUTOLOADを隠蔽 - dann@webdev - dann's portal

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    Sub::AutoでAUTOLOADを隠蔽 - dann@webdev - dann's portal
  • tokuhirom blog

    Blog Search when-present<#else>when-missing. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${entry.path} [in template "__entry.ftlh" at line 3, column 25] - Reached through: #include "__entry.ftlh" [in template "entry.ftlh" at

  • File::Tempの使い方 - D-6 [相変わらず根無し]

    File::Tempの使い方 元ネタはこちらから File::Tempオブジェクトはファイルハンドルであり、同時にoverloadを使用すると文字列に見える、という妙なオブジェクトなんですね。なので、以下のコードは無用 my $expect = 'hogehoge'; my $out = File::Temp->new; diag $out; open my $fh, '>', $out; # ここ print $fh $expect; close $fh; my $contents < io $out; is $contents, $expect; File::Temp->new()した段階ですでにFileHandleオブジェクトになっているはう。なのでこいつに直接書き込んじゃうのが吉 my $expect = 'hogehoge'; my $out = File::Temp->new;

  • File::Tempでファイル名だけ使いたかったんだけど

    App::Hacheroのテストで、 use File::Temp; use IO::All; my $out = File::Temp->new->filename; local *STDOUT; open STDOUT, '>', $out; .... close STOUT; my $contents < io $out; is $contents, 'hoge'; というような感じのテストを書いていて、全然普通に使えてたんだけど、/tmp以下にもりもりテンポラリファイルがたまっていっててちょう嫌な感じだったんで、↓こんな感じでちゃんと消えるようにした。 my $fh = File::Temp->new; close $fh; my $out = $fh->filename; っていうかファイル名だけ欲しいんだけどー、という時にどうやればいいんかな。 *追記 id:lestrrat師

  • Perlでも普通のリスト操作を - みずぴー日記

    30分プログラム、その372。Perlの話をするたびに、id:Gemmaさんが「Perlのリストはキモい、キモすぎる。ネストするだけでリファレンスを使うなんでありえない。」と言いつづけてる。 なので、Perlでもごく普通の単方向リストを作ってみた。これなら、あたりまえにネストできるぜ。 ネタのつもりで作ったんだけど、割りといいかもしれない。特にmapとかfold_rightみたいな再帰関数が、わりとすんなり実装できるのがうれしい。 使い方 # consしてリストを作る my $xs = List->cons(1, List->cons(2, List->cons(3,List->nil))); # 文字列にして表示 # => (1, 2, 3) print $xs->to_string,"\n"; # 別のリストの作り方 my $ys = List->new(1,2,3); print $

    Perlでも普通のリスト操作を - みずぴー日記
  • Perlの最適化器 - Islands in the byte stream (legacy)

    perlgutsとperlhackによれば,Perlの最適化は3段階あるらしい。 check routines context propagation peephole optimization 今までやってきたPL_checkによるカスタマイズはこのcheck routinesフェイズのことだったようだ。 check routinesはOPコードの生成時に行われるので,PL_checkのコールバックから利用できる情報が必ずしも十分でない。しかし,peephole optimizerはある程度まとまった構文木に対して呼び出されるので,そこで利用できる情報は多い。そして,このpeephole optimizerはPL_peeppを書き換えることでカスタマイズできる。しかもこれらの操作はコンパイル時に行われるため,実行速度への影響はまったくないのでやりたい放題である。すばらしい。 なお,pee

    Perlの最適化器 - Islands in the byte stream (legacy)
  • 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
  • はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知

    はてなグループの終了日を2020年1月31日(金)に決定しました 以下のエントリの通り、今年末を目処にはてなグループを終了予定である旨をお知らせしておりました。 2019年末を目処に、はてなグループの提供を終了する予定です - はてなグループ日記 このたび、正式に終了日を決定いたしましたので、以下の通りご確認ください。 終了日: 2020年1月31日(金) エクスポート希望申請期限:2020年1月31日(金) 終了日以降は、はてなグループの閲覧および投稿は行えません。日記のエクスポートが必要な方は以下の記事にしたがって手続きをしてください。 はてなグループに投稿された日記データのエクスポートについて - はてなグループ日記 ご利用のみなさまにはご迷惑をおかけいたしますが、どうぞよろしくお願いいたします。 2020-06-25 追記 はてなグループ日記のエクスポートデータは2020年2月28

    はてなグループの終了日を2020年1月31日(金)に決定しました - はてなの告知
  • Makefile.PLを書こう

    今日で株式会社ソフリットが設立されて1年です。また「会社を作って1年たったまとめ」を書こうかとも思ったんですが、あんまり面白くならなかったので、今年覚えたことのうちでいちばん重要そうなことをまとめようと思います。それは「Makefile.PLを書こう」ということ。 ではさっそく、これからHoge.pmというperlモジュールを書くとしましょう。 [danjou@guido] $ mkdir Hoge [danjou@guido] $ cd Hoge ここでおもむろにMakefile.PLを書き始めます。 [danjou@guido] $ vim Makefile.PL use inc::Module::Install; WriteAll; とりあえずこれだけ書いて保存します。そしてperl Makefile.PLとして実行します。 [danjou@guido] $ perl Makefil

  • warnings::unused - Islands in the byte stream (legacy)

    warnings::unused 宣言しただけで使ってない変数があると警告するプラグマを書いた。 目的としてはPerl::Critic::Policy::Variables::ProhibitUnusedVariablesと同じ。 warnings::methodと同じく,わざわざ別コマンドを走らせる必要はないうえ,実行速度にも影響しないのでたぶん使いやすい。 欠点もwarnings::methodと同じで,-wの元で走らせるとその他のモジュールからものすごい勢いで警告が出る。 変数の宣言処理はParserとTokanizerで行われるうえ,宣言処理に対応するPL_check[OP_PADANY]が呼ばれる時点では参照できる情報が少ないのでかなり大変だった。しかしアップロード後に思いついたが,peepholeオプティマイザ(PL_peepp)を書き換えればもっと楽に実装できるかもしれない。

    warnings::unused - Islands in the byte stream (legacy)
  • lazyなdefault再呼び出し - Unknown::Programming

    metaクラスからたどって直接呼び出した方がわかりやすいんではないかと思ったりしました。 package Foo; use Moose; has hoge => ( is => 'rw', lazy => 1, default => sub { 100 }, ); __PACKAGE__->meta->make_immutable; 1; package main; use strict; use warnings; my $foo = Foo->new; print $foo->hoge . "\n"; #=> 100 $foo->hoge(200); print $foo->hoge . "\n"; #=> 200 $foo->hoge($foo->meta->get_attribute_map->{hoge}->default->()); print $foo->hoge . "\n

    lazyなdefault再呼び出し - Unknown::Programming
  • qr演算子 - 正規表現のリファレンスを作成する - Perl入門ゼミ

    Perl › 演算子 › here 「qr演算子」で正規表現のリファレンスを作成することができます。qr演算子を使うと、正規表現をリファレンスとして変数に保存できます。正規表現のオプションも含めて保存できます。正規表現が、コンパイルされるので、繰り返しパターンマッチを行う場合、高速に動作します。 # 正規表現のリファレンス my $regex = qr/\d+/sm; パターンマッチを行うときは//の中に入れることもできますし、そのまま使用することもできます。//の中にいれたほうが少し見やすと思います。 # //の中で使用 if ($str =~ /$regex/) { ... } # そのまま使用 if ($str =~ $regex) { ... } リファレンスって何? リファレンスについては以下の記事で詳しく解説しています。 リファレンスの使い方をマスターしよう サンプル 正規表現

    qr演算子 - 正規表現のリファレンスを作成する - Perl入門ゼミ
  • BigInt を使わない base62 - Tociyuki::Diary

    Data::Uniqid の base62 は、Math::BigInt で巨大整数の剰余を計算しています。今や Math::BigInt は Perl で使えて当たり前なモジュールではありますが、単に base62 を得るのが目的ならば、巨大整数の計算をおこなわずとも、4 バイトごとに base62 に変換し、連結してもかまわないはずです。結果の文字列が多少長くなりますが、Data::Uniqid::uniqid() 関数の出力が 2 文字増える程度です。 ここでは、単純化するために、引数を 16 進数文字列に限定します。 ⇒ BigInt 割り算を自前でおこなう base62 - Tociyuki::Diary package Data::Uniqid::Lite use strict; use warnings; use Digest::MD5 qw(md5_hex); use Ti

    BigInt を使わない base62 - Tociyuki::Diary
  • Moose使ってると初期処理って殆どいらんねって思えてきた - Unknown::Programming

    Moose使い始めの頃はBUILD用意してそこで初期処理してたんだけど、慣れてくるとhasのlazyとdefaultでその殆どを賄える事に気付いた。 よくよく考えたら初期処理って引数のハッシュを解析してそのキー毎に特殊な処理をさせるだけが多いのでhasで定義しとけばその辺の処理が必要なくなる。 それだけじゃなくてcoerce使えば型変換も自動でやってくれるから自分で実装する必要が無い。 それに後から値を変更する場合にはhasのtriggerがあるのでそれでいいし。 アホ程コードが減る。今更だけど。いやぁ凄い。 Moose凄い。 Moose嫌い。 Moose憎い。 俺が今まで試行錯誤工夫してやってきたことを全部やっちゃうなんて! 酷いよMoose!

    Moose使ってると初期処理って殆どいらんねって思えてきた - Unknown::Programming
  • libxml2 の XmlTextReader インタフェースで XML をパースする - daily dayflower

    libxml2 のドキュメントを眺めていたら,DOM インタフェースや SAX インタフェースだけではなく,XmlTextReader インタフェースというのもありました。 これはドキュメントをパースしながら(ストリーミング)処理をしていくという点で SAX インタフェースに似ているのですが,SAX は callback インタフェースであるのに対して,こちらは能動的に情報を pull するという点でプログラミングがしやすいです。またストリーミング処理なので,(逐一ノード情報を preserve するのでなければ)DOM インタフェースと比べてメモリ消費の点でも優しいです。 Perl の XML::LibXML で使ってみました。C での使い方や概念については Libxml2 XmlTextReader Interface tutorial に載っています。 基的な使い方 use str

    libxml2 の XmlTextReader インタフェースで XML をパースする - daily dayflower