特別な条件がないかぎり、each()は使うべきではありません。代わりにkeys()/values()を使うべきです。その理由は2つあります。 each()は遅い each()でハッシュ全体をループするのは遅いです。これは、keys()/values()がその内部の値をそのまま参照する*1のに対し、each()は代入しないとその値を使えないからです。 ベンチマーク: #!perl use strict; use warnings; use Benchmark qw(cmpthese); my %hash = map { $_ => $_ } ( 1 .. 10000 ); cmpthese -1, { each_k => sub { while(my $key = each %hash) { } }, each_kv => sub { while(my($key, $value) = eac
ということで、Yokohama.pm #7が大盛況のうちに無事終了致しました。 今回のYokohama.pmも様々なテーマのトークが揃っており、それぞれとても興味深かったように感じます。 また、今回トークが初めてという方が数名いらっしゃいましたが、Yokohama.pmでは初めてトークする方も入りやすい雰囲気となっていますので、次回以降もトークが初めてという方がおられたらぜひスピーカーとして参加して頂けたらと思います。 もちろん、今までトークをやってこられた方も積極的に参加して頂いて、様々なレベルのトークが聞けるPerl Mongersとして進めて行ければと考えておりますのでどうぞ宜しくお願い致します。 参加された皆様、トークされた皆様、サポートして頂いた皆様、また今回の開催において会場の貸出やWifi提供等で支援して頂いたライブドア技術部会に感謝致します。ほんとうにありがとうございました
昨日の続き。 ソースフィルタを使って作った。 Xubname.pm package Xubname; use strict; use warnings; use Filter::Simple; my %IDENT = ( '?' => __PACKAGE__.'_is_', '!' => __PACKAGE__.'_destroy_or_danger_', ); FILTER_ONLY code => sub { s[ ( sub \s* ) ( [^\W]\w* )\? ( \s* ) ] [${1}$IDENT{'?'}$2$3]gxs; s[ ( \&? \s* (?:[^\W]\w*::)* ) ([^\W][\w]*)\? ] [${1}$IDENT{'?'}$2]gxs; }, code => sub { s[ ( sub \s* ) ( [^\W]\w* )\! ( \s*
Cocoa::Growl が面白い なんかの時に、お勧めの growl を扱うモジュールの話をした時に、最近の俺の macbook pro では Mac::Growl が入らなくなって悲しいって話をしてたら typester さんが Cocoa::Growl を作ってくれました。 Objective-C をそのまま XS module 化しててイカすんですが、さらに AnyEvent のイベントループを cocoa のイベントループを使うようにする AnyEvent::Impl::NSRunLoop なんてのまで作っちゃって、 これを使うと growl の通知をクリックしたイベントとかを Perl 側でハンドリング出来ちゃったりして面白そうだけど使いどころ良くわからなかったので、 AnySan で繋いでる irc チャンネルに yappo って含む発言があったら growl で通知して、そ
この項、必ず追記を参照のこと。 Gearmanを使ったジョブの処理を書いていて、 gearmandを起動 workerプロセスを起動 clientがジョブを投げ、先に起動したworkerがそれを処理 返ってきた結果を検証 テスト終了時には、gearmand/workerをシャットダウン ってのを全部いっぺんにできないかなーってんで、Test::TCPでやってみました。workerプロセスはlistenする必要がないので、 no warnings 'redefine'; local *Test::TCP::wait_port = sub {}; とかしちゃってるところが「ヒャー」って感じですが、まあいいかな、と。。。他にいい方法があったら教えてください!!1 use strict; use warnings; use Test::TCP; use Test::More; use Gearma
五島市 グーグル ブロック チェーン 「玄関前の小さな椅子に座って、暗くなっても家に入らず、じーっと私の帰りを待ち続けるようになったんです 新潟県佐渡市 ブロック チェーン google 後日警察が息子を厳しく調べたところ、父親を寝床の中で、顔に布団をかぶせ鼻口閉塞させて、窒息死させたことを自白した,20 日 パチスロ イベント enjin ブロック チェーン 山形県鶴岡市 ビット コイン の ブロック チェーン 地裁は「雄大から心理的DVを受け、雄大からの心理的影響を強く受けていた」と認定はしたが、「強固に支配されていたとまでは言えない」として、責任を大幅には減じることはせず、懲役8年の実刑 富里市 CR北斗の拳6 拳王 Ver.394 そのため、ひきこもり支援者の間でさえ「女性はいない」との声が上がるほど、女性のひきこもりは可視化されていない, ガートナー ブロック チェーン 長野県中
個人的にはapi単位での引数のバリデーションはあった方がbetterかなとおもう。 tokuhiromが 複数人で開発している場合では、クラスをかいた人と利用者がちがう場合があるので、validation は必要だとおもうけれど。と書いてるけどこれはまさにその通りで、 さらに言うと自分の書いたコードも時間が経てば他人が書いたコードと一緒だから バリデーションの情報から引数の情報を読み取れると、 そのapiに対する理解の速度は向上するとおもう。 実行速度とのトレードオフだったりはするだろうけど、無駄な引数渡したり、本当は必要な引数を渡しきれなかったりして それで誤動作とかするくらいならバリデーションあったほうがいいんじゃないでしょうかね。 perlcodesampleさんの 動的言語の利点は、引数にどのような型でも渡せるので、静的言語のように型の指定がいらないということです。つまり、動的言語
CPAN のメタデータは以下の3つにより配布されている。 authors/01mailrc.txt.gzmodules/02packages.details.txt.gzmodules/03modlist.data.gzいずれも gzip した状態で 200KB を越えるようなわりと大きなテキストファイルなので、これを web site や、CLI 等から直接利用すると、速度が遅くなる。 そこで、以下のような解決策がかんがえられているみたいです。 CPAN::SQLitehttp://search.cpan.org/~rkobes/CPAN-SQLite-0.199/ 上記ファイルから SQLite にデータをつっこむスクリプトを提供。検索用のメソッドも提供してくれる。 なお、一部の検索系のメソッドに SQL Injection 脆弱性があるので注意。ユーザーからの入力を直接いれさせると大
サキとは彼女の自宅近く、湘南台駅前のスーパーマーケットで待ち合わせをした。彼女は自転車で後から追いつくと言い、僕は大きなコインパーキングへ車を停めた。煙草を一本吸ってからスーパーマーケットへ向かうと、ひっきりなしに主婦的な女性かおばあちゃんが入り口を出たり入ったりしていた。時刻は午後5時になる。時計から目を上げると、待たせちゃったわねと大して悪びれてない様子でサキが手ぶらでやってきた。 お礼に料理を作るとはいえ、サキの家には食材が十分足りていないらしく、こうしてスーパーマーケットに寄ることになった。サキは野菜コーナーから精肉コーナーまで、まるで優秀なカーナビに導かれるように無駄なく点検していった。欲しい食材があると、2秒間程度それらを凝視し、一度手に取ったじゃがいもやら豚肉やらを迷うことなく僕が持っているカゴに放り込んだ。最後にアルコール飲料が冷やされている棚の前へ行くと、私が飲むからとチ
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
CPANを常日頃観察している方は、やたらとプラグマもどきが多いことにお気づきだと思います。これらは目的が多少違っていても、多くはベストプラクティスのためだと言ってもいいでしょう。 いいプログラマの素質にはいろいろな要素があります。当然頭が切れる、理解が速い、構想力に秀でている等いろいろあるでしょう。私が思うには、最低限必要なことがあります。つまり己を知っていることなんです。自分の弱点、短所、悪癖等を自覚していることです。その弱さを知っていれば、当然それをカバーするものはないかと探して、strict、warningsのコアプラグマはほぼ誰でも必須であることに気がつくはずです。自分が駄目だからそれらに頼らざるを得ないのです。後、使うべきプラグマは個人差があるでしょう。日本人なら日本語リテラルを書く機会が多いから、どうせ書くならUTF-8でやるのが面倒が無いのでutf8プラグマでしょう(これも極
Plaggerに関する重要なお知らせ 「それPla」の用法が変更になりました。 詳しくは下記の参考文献を、ご確認下さい。 参考文献:http://d.hatena.ne.jp/keyword/%a4%bd%a4%ecPla Posted by Yappo at 2009年09月09日 11:18 | TrackBack | 適当
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
Perl 5.8以降には共有文字列というメカニズムがあり,非常に限定的ながら,うまく使用するとメモリと速度の双方を節約できる。 基本的な使い方: SV* sv = newSVpvn_share(pv, len, hash); SV* sv = newSVpvs_share("..."); これでsvの文字列部分がインタプリタ全体で共有されるため,同じ文字列を複数個生成してもmalloc(3)は一度で済む。 実際には,共有文字列SVの生成速度そのものは通常の文字列SVよりも遅いことがある。しかし,共有文字列の真価は,ハッシュキーとして使用する際に発揮される。 ハッシュからキーを検索する際にはキーとなる文字列の照合*1を行わなければならないが,共有文字列はポインタ値がインタプリタを通して等しいので,文字列の照合は行わなくてすむ。また,共有化文字列SVは内部にハッシュ値*2を持っているので,ハッ
There was recently some talk on p5p about getting perl up and running on the LLVM. This was following the recent excitement from the Python crowd about the Unladen Swallow project, and less so, the MacRuby Experimental Branch.So following that post I decided to see how easy/hard it was to get to the first stage - getting perl compiled and running with clang, the llvm gcc-like compiler.It wasn't to
Perlの謎APIをwrapして、Perlスクリプトの関数をC++から簡単に呼び出せるようにしてみた。 てか、 リファレンスカウントを透過的に行えるようpimpl形式のコンテナを使ってみる mortalを透過的に行えるようcall_sv()による関数呼び出しを完全にブラックボックス化する って実験をやりたかっただけなのにDevel::BindPPとは完全に別プロダクトになっちゃいました。 test1() は、任意の数の引数を取り、引数の合計値を返す add()という関数 *1 を C++ から呼び出す例。 test2() は、MIME::Base64::encode_base64() を呼び出す例。 test3() は、複数個の値を返す関数を処理する例。 test4() は、perl::value() の演算子オーバロードのテスト。 #include <iostream> #include
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
いま、 ############### 中西 ############### ############### 木村 ############### ############### 田中 ############### ############### 山本 ###############と出力するソースを考えるとする。 へたくそに書く なにも考えずにとてもへたくそに書くと、 use strict; print q{###############}, "\n"; print q{中西}, "\n"; print q{###############}, "\n"; print q{###############}, "\n"; print q{木村}, "\n"; print q{###############}, "\n"; print q{###############}, "\n"; pr
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く