タグ

perlに関するKinjouJのブックマーク (110)

  • にひりずむ::しんぷる - make test で Test::mysqld を永続化させる方法

    実際にどうやってんのかなーって話をあんまりしてなかったので。 まず、こんな感じのモジュールを t/lib/Test/MyApp/mysqld.pm とかで作って M::I::TestTarget の default_test_target() で `make test` を書き換えてやり、t/script/setup_mysqld.pl に とか書いてあげます。 それぞれのテストでは、Test::MyApp::mysqld->setup で mysqld を立ち上げるようにして置けば、 prove で個別にやった時は、それぞれ立ち上がる make test したときは、最初に立ち上げて、あとは使いまわす という感じになります。 ポイントとしては、 $ENV{TEST_MYSQLD} に Test::mysqld のデータ構造をそのまま JSON にして突っ込む Test::MyApp::m

    KinjouJ
    KinjouJ 2012/06/09
  • Twiggy::Prefork をリリースしました - blog.nomadscafe.jp

    だいぶ以前 Plack::Server::AnyEvent::Prefork というのを書いて某所で使っていたのですが、ここ数日で事例がもうひとつ増えたついでに Twiggy ベースに書き直してCPANリリースしました。 https://metacpan.org/module/Twiggy::Prefork 使うには、 $ plackup -s Twiggy::Prefork -a app.psgi な感じで、Server::Starterにも対応しているので、 $ start_server --port 5000 -- plackup -s Twiggy::Prefork -a app.psgi とすれば、hot-deployも可能です。 起動オプションは、Twiggyがサポートしているオプションに加えて、 —max-workers preforkするworker数 —max-reqs-

  • YappoLogs: Perl 5.16 の面白そうな新機能を厳選して5つ紹介

    Perl 5.16 の面白そうな新機能を厳選して5つ紹介 日人が金環日で騒いでる待っただかにリリースされた事で有名な Perl 5.16 ですが、ちょっとまえに僕が Hokkaido.PM Casual で新機能の見所プレゼンしてて、折角なのでブログにも書いとこうと思いまして転載仕様かなーと。 More CORE subs are callable through references コア関数のコードリファレンスを取れるるようになります。たとえば文字列フィルタリングをユーザが差し替え可能なモジュールとか作る時に捗るって jsx が言ってました。 use strict; use warnings; use 5.016; # ここの関数テーブルをユーザの好みに差し替える # 基はコア関数を使う my %func_map = ( index => \&CORE::index, splic

    KinjouJ
    KinjouJ 2012/06/04
  • perl - use utf8; #って何だ? : 404 Blog Not Found

    2009年06月15日07:00 カテゴリLightweight Languages perl - use utf8; #って何だ? id:otsuneに建設予定フラグがたてられていたので。 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech Perl の utf8 関係が未だ全く理解できない。わからないことがわからないので整理 use utf8はいつフラグをたてるか use utf8 しててもフラグたたないことがある…… これは、以下の実例を見ていただくのが一番よいだろう。 #!/usr/bin/perl use strict; use warnings; use utf8 (); sub check_flag{ my $str = shift; print qq("$str" ), utf8::is_utf8($str) ? 'is' : 'IS NOT',

    perl - use utf8; #って何だ? : 404 Blog Not Found
    KinjouJ
    KinjouJ 2012/05/31
  • perlbrewとextlibなアプリのcronとかdaemontools - As a Futurist...

    perl は system perl じゃなくて perlbrew で入れて、アプリで必要な CPAN モジュールは全てアプリのディレクトリ下の extlib というディレクトリにインストールする方式は個人的にはいい感じだよなぁと思いつつ、cron とか daemontools がいつもどうやるのが正解なのか分からず困ってた。 またセットアップする機会があったので色々考えた結果、こんな感じなら割とすっきりした感じになった。 env このファイルがキモで、アプリのディレクトリに移動しつつ、いい感じに perl とか PATH とか@INC を設定して、渡されたコマンドを実行してくれる。 # perl -v This is perl, v5.8.8 built for x86_64-linux-thread-multi # ./env perl -v This is perl 5, versi

    perlbrewとextlibなアプリのcronとかdaemontools - As a Futurist...
    KinjouJ
    KinjouJ 2012/05/26
  • Lingua::JA::WebIDF |  ぱわふるでいず

    KinjouJ
    KinjouJ 2012/05/26
  • Streaming with PSGI - tokuhirom's blog

    basic streaming(code by chiba-san https://gist.github.com/2785757) use strict; use warnings; my $app = sub { my $env = shift; return sub { my $responder = shift; my $writer = $responder->([ 200, []]); for ( 1..5 ) { $writer->write("hoge"); sleep 1; } $writer->close; }; }; $app; with AnyEvent use strict; use warnings; use utf8; use 5.010000; use AnyEvent; use Time::HiRes qw(sleep); my $i=0; sub { m

    KinjouJ
    KinjouJ 2012/05/25
  • Perl best practices[Perlベストプラクティス] 12章 正規表現 12.1~12.12 - やわらかコード

    , perl | 01:33 | 問題にぶつかると「正規表現を使えばいい」と考える人がいる。 そして、問題を2つ抱えることになる。 --Jamie Zawinski 常に/xフラグを使用する。 これは、確実につかう。JScriptでもXRegExp使ってます。 Xを使うことで、ホワイトスペースが無視され、#も使用できる。そのため、ギチギチに詰められた正規表現である必要がなくて、意味のある単位ごとに、スペースで分けることができる。  もっと分かり易くするには、意味のあるグループごとに改行して、インデントを付け、コメントをつける。 常に/mフラグを使用する メタ文字^$は任意の行の先頭と末尾にはマッチしない。ほとんどのUnixユーティリティ(sed,grep,awk等)はもともと行思考なので、^$は行の先頭と末尾にマッチするが、Perlではそういった意味はもたない。(JavaScriptでも

    KinjouJ
    KinjouJ 2012/05/20
  • Coroを使って並行処理 - JPerl Advent Calendar 2009

    こんにちわ。『層・圏・トポス』読者の会からの刺客、id:hirataraです。 「並行処理」って言葉はなんだか魅力的ですよね! そこで、今日はCoroを使った並行処理を紹介します。なお、Coroはコアモジュールではありませんので、使ってみたい場合にはCPANからインストールして下さい。 スレッドを作る Coroでは、asyncによって新しいスレッドを作ることができます。ただし、asyncでスレッドを作っても、何もしなければ他のスレッドに勝手に処理が移ることはありません。asyncで作成した別のスレッドに制御を移すには、明示的な操作が必要となります。ここではcedeを使って、asyncブロックへ処理を移しましょう。 use strict; use warnings; use Coro; async { print "Another thread\n"; }; print "main thre

    KinjouJ
    KinjouJ 2012/05/19
  • 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

    KinjouJ
    KinjouJ 2012/05/08
  • Server::Starterから学ぶhot deployの仕組み - $shibayu36->blog;

    以前http://tech.naver.jp/blog/?p=1369の記事を読んだのだけれど、それまでにprocessの知識が無かったりして、まったく理解できませんでした。そこでWorking with UNIX ProcessesやServer::Starterの中身を呼んでようやくhot deployの仕組みを理解できた(気になっている)ので、Server::Starterの実装を追いながら、それをまとめてみます。 hot deployとは hot deployとは「再起動の時にリクエストの処理を続けながら、変更の内容を反映するための手段」です。 通常serverをrestartさせるときは、stop -> startの流れになると思いますが、この場合stopしてから、start出来るまでの期間にリクエストを処理できない期間が発生します。その期間なしにdeployする仕組みがhot

    Server::Starterから学ぶhot deployの仕組み - $shibayu36->blog;
    KinjouJ
    KinjouJ 2012/05/07
  • Perl-5.14 で解析表現文法 - Tociyuki::Diary

    先読み機能付き左選択肢優先の正規表現用 NFA にプッシュダウン・スタックをつけてリエントラントに書き直し、欲張りマッチングの後戻りバックトラッキングを止めにすると、そのままwikipedia:解析表現文法 (Parsing Expression Grammar, PEG と略す) を解釈できるオートマトンになります。 さて、Perl は 5.8 の頃から既にバックトラック抑制機能をもっており、さらに 5.14 の組み込みエンジンは解析表現埋め込みの Perl 実行文含めてリエントラントに動くように書き直されたものになっています。ということで、Perl-5.14 なら PEG をそのまま正規表現感覚で実行可能になっているというわけです。PEG は正規表現にかなり近い記法ではあるのですけど、それでも慣れ親しんだ正規表現の記法そのままで PEG できるのは素晴らしく、さすがに、まだ CPAN

    Perl-5.14 で解析表現文法 - Tociyuki::Diary
    KinjouJ
    KinjouJ 2012/04/16
  • Parallel::ForkManager と SIGNAL で子プロセス挙動制御の術 - blog.nekokak.org

    Just Ideaなんですが、 Forkして子プロセスに処理を行わせる事はよくやることなんですが、 実際の全ての処理にある程度時間がかかる場合に、現在走っている処理を一時停止したり再開したりすることができるとおもろいかなぁとおもったので サクっと書いてみた。 #! perl use strict; use warnings; use Parallel::ForkManager; use Time::HiRes qw(sleep); my $pm = Parallel::ForkManager->new(10); my $pause=0; $SIG{HUP} = sub { $pause ^= 1 }; my $finish=0; $SIG{TERM} = sub { $finish = 1 }; sub pause { $pm->wait_all_children; while (1) {

    KinjouJ
    KinjouJ 2012/03/07
  • お手軽に死活監視をPerlのCPANモジュールApp::MadEyeで行う | hirobanex.net

    去年のYAPC::Asia2011では、運用の話が活発に行われており、監視周りの話も多かったように記憶しています。そこで、監視の基となる死活監視について、今回は私が普段使っているtokuhiromさん作の死活監視ツールApp::MadEyeを紹介しつつまとめたいと思います。 「死活」の通り、「死んでいるか、活きているか」について監視することです。具体的には、サーバーにPingを飛ばして死んでいるか活きているか確認したり、サーバーのハードディスクが一定量を超えているかどうか確認したりすることです。つまり、継続的に「1/0」で確認し続けることが、死活監視です。実務的な用途としては、「サイトが落ちている!」っていう状況に素早く対応するための準備となります。 リソース監視 一方で、リソース監視は、システム特定リソースの状態の変化を確認し続けることといえます。例えば、サーバーのロードアベレージの推

    KinjouJ
    KinjouJ 2012/02/27
  • リストと配列(Array)はPerlでは別物

    songmu @songmu @hisaichi5518 @shiba_yu36 リストと配列(Array)はPerlでは別物だよ。リストはlisp由来。値の返し方のコンテキストがスカラとリストがある。ハッシュだって、値を返させるとリストを返すでしょう。 songmu @songmu @hisaichi5518 @shiba_yu36 my %hash;$hash{qw/1 2 3/} = 'hoge';say $hash{qw/1 2 3/};say Dumper \%hash; とかやると驚きの結果が。

    リストと配列(Array)はPerlでは別物
    KinjouJ
    KinjouJ 2012/02/26
  • Amon2でFacebookAPIを使う その1 - Perl勉強メモ アルパカDiary出張版

    FacebookAPIを使う要件が出てきそうなのでいろいろ調査中。 perlでFacebookAPIを使うにはFacebook::Graphがいいんでしたよね! Facebook::Graphのドキュメントにちょうどチュートリアルがあったので 試しに今回はその手順通りに設定していきたいと思います。 ただしそのままではなく一部Amon2用に置き換えてます。 また、今回は表示するデータを自分のニュースフィードにしてみました。 あと、Facebook アプリ登録画面ってログインするたびちょこちょこ変わってて 他のサイトの設定画面が参考にならなかったりするので スクリーンショットも添付してみましょう。 Step 1: Set up the developer application on Facebook. https://developers.facebook.com/ に行きます。 Step

    Amon2でFacebookAPIを使う その1 - Perl勉強メモ アルパカDiary出張版
    KinjouJ
    KinjouJ 2012/02/19
  • バイナリファイルを解析する

    Perlといえばテキスト処理や正規表現が得意で、バイナリを扱うような話についてはあまり聞かない印象があります。Perlが持つ関数pack/unpack等でもバイナリ処理は可能ですが、今回はData::ParseBinaryを使ってバイナリファイルを気軽に解析してみましょう。 基 ファイルからストリームを作る 解析したいファイルをData::ParseBinaryで扱えるストリームに変換します。 use Data::ParseBinary; my $stream = CreateStreamReader(File => $file_handle); 解析したい構造を定義する Struct関数で解析したい構造を定義します。Struct以下には基データ型やコンテナ型、ビット/バイトパディング型、制御構文型等を使用できます。各型に指定したラベルが解析結果として得られるハッシュのキーとなります。

    KinjouJ
    KinjouJ 2012/02/15
  • Asynchronous MySQL Queries in Perl Using DBD::mysql and AnyEvent | hoelzro [blogs.perl.org]

    A lot of people use MySQL, and these days, asynchronous-style programming has really taken off. If you're involved in both of these camps, you may be wondering how to send a query to MySQL and have it inform your event loop when it's ready with the results of that query. A common solution is to use a thread or child process for each connection, and exchange data using IPC. However, if you're using

  • warn() で吐かれるログを捕まえて投げる - 酒日記 はてな支店

    Perl では $SIG{__WARN__} という疑似シグナルハンドラを使って、warn() で出力されようとする内容をトラップして処理することができます。 package MyWorker; my $logger = Fluent::Logger->new; sub work { my $job = shift; local $SIG{__WARN__} = sub { my $msg = shift; # warn() で出力される文字列が渡ってくるので logger で送る $logger->post( "job" => { jobid => $job->jobid, # jobid で検索できるように message => $msg, }, ); }; # job の処理 # warn("Error!") } 最初からログを何らかのオブジェクトに渡す仕組みを入れて作っていればよか

    warn() で吐かれるログを捕まえて投げる - 酒日記 はてな支店
    KinjouJ
    KinjouJ 2012/02/07
  • シンプルなWebアプリを今、自分なりに書いてみる - ゆーすけべー日記

    Webアプリでユーザーからの入力がある部分を作る際、ユーザーフレンドリーでかつ実装も簡単な方法を模索するのにkazeburoさんのブログ記事をよく参考にしていました。 CGIとは〜〜だというのはたくさん答えがあるだろうけど、自分的には「ユーザからの入力をチェックして画面にだす」ものだというのがしっくりくる。当たり前のことを書いているようだがMVCモデルでいうコントローラーの作成がCGIだと。 シンプルなWebアプリなCGIを書いてみる : blog.nomadscafe.jp kazeburoさんはほんとにCGIで実装してたけど、フレームワークを使ったり、ライブラリを使ったりしたら、つまり、今風に、実用的に書いてみるとどうなるのかやってみています。kazeburoさんのとちょっとだけ仕様が違うがなんとなくこんなかなーという具合。あ、もちろん僕のことなんでPerlを使ってます。が、コードは非

    シンプルなWebアプリを今、自分なりに書いてみる - ゆーすけべー日記
    KinjouJ
    KinjouJ 2012/01/31