タグ

perlに関するkozy4324のブックマーク (18)

  • いい感じに出力をインデントしてくれるモジュール #perl - 詩と創作・思索のひろば

    [2013-11-20: Print::IndentedがCPANになくてしょんぼりしている。 とのことで shipit いたしました。 あざーす!] 過去のよく分からないコードの挙動を把握したいときには print (warn) するのが少なくともとりあえずの方法としては常套手段ですが、これがただ平坦に画面に現れるだけだと見づらい。例えば条件分岐やループの中にいる時は出力をインデントするようにすると動きが掴みやすくなるけれど、ただでさえ人間に単純労働を課す print デバッグにそこまで労力を使うのは辛い。そういう面倒さを減らそうという動機で、このモジュールは書かれました。 https://github.com/motemen/perl5-Print-Indented 一体何をするのかというと今書いた通りですが、print 時に、その print 関数の呼び出しコードのインデントに応じて

    いい感じに出力をインデントしてくれるモジュール #perl - 詩と創作・思索のひろば
    kozy4324
    kozy4324 2013/11/19
    なるほど!
  • モダンPerlリファクタリング - YAPC::Asia Tokyo 2013

    継続的インテグレーションやテストフレームワーク、Carton や Plack/PSGI を徐々に適用していきながらレガシーな Perl スクリプト、アプリケーションをモダンな構成/メンテナンスしやすい構成に仕上げていくまでのノウハウ・戦略について話します。 具体的な題材は話者が10年ちかく前に作った amazlet というWebアプリケーション、gist に置かれていた markdown2inao という Markdown の変換スクリプトなんかを想定してます。 余裕があればそれらを DevOps 的に回していく話についても。

    kozy4324
    kozy4324 2013/05/29
    perl関係なく勉強になりそう
  • 本当にあったレガシーな話 - YAPC::Asia Tokyo 2013

    数ヶ月前よりlivedoorBlogという10年ほど運営されているサービスのコードを書いております。主な仕事は新機能の開発ではなく、mod_perl 1.3.x ベッタリなコードをApacheからひっぺがしPSGI/Plack上で運用するための変更、およびそこから派生する諸々です。 言うのは楽ですがこのコードベースは10年物。数十人のエンジニア達がその上を通りすぎ、動作環境はperl 5.8.8。なんとその行数20万行。Webの部分はmod_perlにべったり。それはもはや誰も触りたくない魔窟だったのです・・・ めでたいことにこの3月、無事に一番大きい部分の改修は終わり、皆さんがみているlivedoorBlogはほとんどPSGI化されました。現在もまだまだ改修は続けていますが、このトークではこの改修に伴って私達が行った様々な変更を説明していきます。 細かな環境整備(ログ、タイマー等) mo

    kozy4324
    kozy4324 2013/05/29
    これは聞きたい
  • Minilla を用いた Perl モジュールの作り方 - tokuhirom's blog

    Minilla を用いた Perl モジュールの作り方 http://shanon-tech.blogspot.jp/2013/05/perl.html Perl モジュールの作り方、2013年においては Authoring tool をつかって作るのがよいです。具体的には Minilla でつくるのがオススメであります。 perlbrew なり plenv なりで perl をいれたあとは、 % cpanm Minilla として Minilla をインストールします。 % minil new Foo とすると、Foo.pm のスケルトンができあがります。作者の名前などは ~/.gitconfig などから自動的にさがしてきますので、設定不要です。 できあがったディレクトリは以下のような形になっています。 Foo ├── Build.PL ├── Changes ├── cpanfile

  • Monoceros というPrefork型だけどC10Kの接続を捌くことができるPSGI/Plackサーバ書きました - blog.nomadscafe.jp

    Monoceros というPSGI/Plackサーバ書きました https://metacpan.org/release/Monoceros https://github.com/kazeburo/Monoceros StarmanやStarletのようなPreforkなアプリケーションサーバでは、コネクションの維持イコールプロセスの占有なので、HTTPのKeepAliveは無効にするのが一般的ですが、負荷の高いサービスではTIME_WAIT状態のソケットが溜まったり、SYN-ACKの再送問題などあり、KeepAliveを使いたいという欲求があったりなかったりします。 Monoceros はリクエストを処理するworkerの他に、イベントドリブンで動くコネクション管理プロセスを立てて、クライアントからの接続ソケットをunix domain socketを使いプロセス間でやりとりします。待機

  • 最近のPlack/Starletのパフォーマンス改善まとめ。最大2倍の性能向上 - Hateburo: kazeburo hatenablog

    最近のPlackとStarletにはパフォーマンス改善のため次のような変更が加えられています。 Plackに対する変更 (カッコ内はバージョン) Plack::Request::query_parameters の最適化 (1.0018) Plack::Middleware::AccessLog に Apache::LogFormat::Compilerの導入 (1.0023) Starletに対する変更 local $SIG{..} を無くし、rt_sig* system call が呼ばれる回数を削減 (0.17_01) headerとbodyを結合して一度に出力する閾値を1024から8192に変更 (0.18) ベンチマーク これらの変更の効果を確認するために、次のベンチマークを実行してみます まずアプリケーションはこんな感じ use Plack::Builder; use Plac

    最近のPlack/Starletのパフォーマンス改善まとめ。最大2倍の性能向上 - Hateburo: kazeburo hatenablog
  • Text::LTSV - naoyaのはてなダイアリー

    勢いで Text::LTSV という perl モジュールを書いたけど、ただ tab を split してコロンで split するだけなのでわざわざこんな駄モジュールを使うまでもない、という・・・。 use Text::LTSV; my $hash = Text::LTSV->parse_line("hoge:foo\tbar:baz\n"); is $hash->{hoge}, 'foo'; is $hash->{bar}, 'baz'; my $data = Text::LTSV->parse_file('./t/test.ltsv'); # or parse_file_utf8 is $data->[0]->{hoge}, 'foo'; is $data->[0]->{bar}, 'baz'; my $ltsv = Text::LTSV->new( hoge => 'foo', b

    Text::LTSV - naoyaのはてなダイアリー
    kozy4324
    kozy4324 2013/02/07
    Text::LTSV
  • カジュアルにデータを確率とか優先度で処理する - Articles Advent Calendar 2012 Casual

    こんにちは、こんにちは。カジュアルにPerl使っているkoba04 です。 Webアプリを作っていて、確率で処理を分けたり複数の要素を重み付けて選びたいことってありませんか? 真っ先に浮かぶのはガチャみたいなものですが、それ以外にもランダムでバナーを出し分けてみたり、接続するサーバーを重み付けて選んだり色々と使い道が思い浮かびます。 そんな時に使える二つのモジュールをご紹介したいと思います。 詳しくは下記の作者の方のブログを見てください。 Sub::Rate Data::WeightedRoundRobin 以上! でもいいのですが..順番に紹介してみたいと思います。 モジュールなしで実装 優先度を付けてデータを選びたい時はrandを使っての実装が思い浮かびますが、バグりそうな気もするし面倒だし出来れば書きたくないです。 (書き方が悪いという説もある) # 結果をdumpする関数 sub

    カジュアルにデータを確率とか優先度で処理する - Articles Advent Calendar 2012 Casual
  • なんてこった…CPANモジュールをnode.jsで動かしてしまうライブラリ「node-perl」 - tokuhirom's blog

    なんてこった…CPANモジュールをnode.jsで動かしてしまうライブラリ「node-perl」 https://github.com/tokuhirom/node-perl/ ここ最近、プログラミング言語同士の壁が徐々に破壊されている気がします。あるプログラミング言語上で別なプログラミング言語を動くようにしたり、置き換えてしまったりするような類です。今回はその一つ、CPAN moduleをnode.js上で動かすという、かなり無茶な気がしなくもない、そんなソフトウェアnode-perlを紹介します。 var Perl = require('../index.js').Perl; var perl = new Perl(); perl.use('LWP::UserAgent'); var ua = perl.getClass('LWP::UserAgent').new(); var res

  • Re: Re: perl 5.16.0 でメモリリーク? - Islands in the byte stream (legacy)

    perl 5.16.0 でメモリリーク - たごもりすメモ Re: perl 5.16.0 でメモリリーク? - tokuhirom's blog 修正してpull-requestを送りました。 https://github.com/mirrors/perl/pull/9 https://rt.perl.org/rt3/Ticket/Display.html?id=114340 ※ githubのpull-req/issuesではなくperlbugでレポートしてほしいとのこと。今回は tokuhiromの報告があったのでそれで。パッチ自体は問題ないようなので、Perl 5.16.1 では修正されるでしょう。 以下蛇足。 せっかくなので、何を考えながらデバッグしたかを記録しておく。 今回のバグはSVのリークではなくmalloc()したメモリの開放忘れだったので、Test::LeakTrace

    Re: Re: perl 5.16.0 でメモリリーク? - Islands in the byte stream (legacy)
  • 雑多の備忘録 - Perl - GD::Graph

    GD を使って Perl でグラフを作成するモジュール。色々と遊べる。 インストール Windowsの場合 Perl が ActivePerlPerl 5.10 であり、実行ファイルへのパスが環境変数 PATH に含まれていると前提。 ActivePerl 10xx Win32 PPM packages に置かれているパッケージを頂戴して、コマンドプロンプトから ppm を利用してインストールする。 C:\> ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/GD.ppd C:\> ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx/GDGraph.ppd C:\> ppm install http://cpan.uwinnipeg.ca/PPMPackages/10xx

    kozy4324
    kozy4324 2011/11/25
    GD::Graph
  • perl-mongers.org

    This domain may be for sale!

  • Perl-users.jp - 日本のPerlユーザのためのハブサイト

    Perl Mongers Perl Mongers とは、日各地に存在する、Perl ユーザーのコミュニティのことです。各種イベントが行われていますので、是非参加してみましょう。 Shibuya.pm Fukuoka.pm Kansai.pm (@kansaipm) Yokohama.pm (@yokohamapm) Hokkaido.pm (@hokkaidopm) Nagoya.pm (@nagoyapm) Kushiro.pm (@kushiropm) Kyoto.pm (@kyotopm) Kamakura.pm Niigata.pm (@niigatapm) Sendai.pm (@sendaipm) Tokyo.pm Hachioji.pm (@hachiojipm) Chiba.pm (@chibapm) Yomitan.pm (@yomitanpm) Machida.pm

  • 無精で短気で傲慢なプログラマ perl+DBI プログラムの鉄則 - RaiseError と AutoCommit

    perl+DBI プログラムの鉄則 のつつき。 鉄則その 1. my $dbh = DBI->connect($dsn, $user, $password, {RaiseError => 1, PrintError => 0, AutoCommit => 0 }); connect 時にするべきこと。 RaiseError は ON にする。そうすれば DB の処理でエラーが発生した ときに勝手に die してくれる。いちいちエラーチェックをする 必要もなくなるし、エラーチェック漏れも起こりえない。楽できるのに、 なおかつ質も向上する。プログラマたるもの、怠惰でなくてはならない。 デフォルトでは PrintError が ON で RaiseError を OFF になっている。 RaiseError を ON にするとエラー発生時にエラーメッセージがダブって 表示されてしまうため、Pri

  • SMART! ウェブ講座 sql

    1.ハッシュへ値を代入 ハッシュ変数は、配列のインデックスが文字列となったもので、このインデックスを『キー』と呼びます。ハッシュの場合は要素の値がキーによって管理されます。 ハッシュの宣言 ハッシュへ値を代入 ハッシュの宣言 ハッシュを宣言するときは変数名の前にパーセント( % )を付けます。 %hash; ハッシュへ値を代入 配列では、[ ] でインデックスを囲みましたが、ハッシュは、 { }でキーを囲みます。例えば社員の名前とメールアドレスを管理する場合、次のような方法でハッシュを使った管理ができます。 $hash{'Akai'} = 'akai@domain.com'; $hash{'Ishikawa'} = 'ishi@domain.com'; $hash{'Ueda'} = 'ueda@domain.com'; 複数の値を一度にハッシュへ代入するには、キー、値の順番で記述します。

    SMART! ウェブ講座 sql
  • CodeZine:OpenIDを使ってみよう(openid, 認証方法, Perl)

    はじめに OpenIDは最近非常に注目が高まっている認証技術の一つです。ここでは、OpenIDを利用したPerlのサンプルを通じてOpenIDのメカニズムに触れていきたいと思います。必要な環境 Perl 5.8以上が動作する環境が良いと思います。基動作の確認はMac OS Xを利用しましたサンプルの紹介 早速サンプルコードの「openid-test.cgi」を見ることにしましょう。このサンプルはOpenIDを利用した簡易ログインページです。 #!/usr/bin/perl use strict; use warnings; use CGI; use Net::OpenID::Consumer; #use LWPx::ParanoidAgent; use LWP::UserAgent; my $query = CGI->new; $query->charset('utf-8

  • 特殊変数一覧 [Perl講座 -Smart]

    特殊変数一覧 ※強調した特殊変数はよく使われるものです。 グローバルな特殊変数 グローバルな特殊配列と特殊ハッシュ グローバルな特殊ファイルハンドル グローバルな特殊定数 パターンマッチに関する特殊変数 ファイルハンドルに関する特殊変数 グローバルな特殊変数 $_ use English: $ARG デフォルトで入力やパターンマッチの対象になる特殊変数です。 $. use English: $INPUT_LINE_NUMER / $NR [入出力関連] ファイルハンドルの現在の行数 ※ファイルハンドルを明示的にクローズすると行番号もリセットされます。 $/ use English: $INPUT_RECORD_SEPARATOR / $RS [入出力関連] 入力時のレコード区切り文字 デフォルト値は改行文字です。 $/ の使い方 $/ を未定義値にすると、ファイルの内容を一度に読み込むこ

  • CGI-Perl 基礎実地編 - 実習14 (画像レスポンス、画像出力、画像表示) - SAK Streets

    CGI-Perl 基礎実地編 - 実習14 (画像レスポンス、画像出力、画像表示) ■test14.cgi ------ ↓ ここから ↓ ------ #!/usr/local/bin/perl #// 準備 $fname = 'test.gif'; $imgtype = 'gif'; $cufld = '.'; $dbfld = '/w_test/'; $path = $ENV{'PATH_INFO'}; #// 動作環境セット if (($i = index($path, $dbfld)) != -1) { $cufld = '..' . substr($path, $i, $i + length($dbfld) - 1); } #// 画像オープン open(IMG, "$cufld/$fname") or die; #// イメージ表示 binmode IMG; binmode

  • 1