タグ

ブックマーク / blog.livedoor.jp/xaicron (8)

  • にひりずむ::しんぷる - perl で復数のプロセスからログを吐くときは syswrite または flock すべし

    タイトルですべてを語っていますし、http://blog.livedoor.jp/sonots/archives/32645828.html あたりを読むと良いのですがメモ。 最初にまとめると CORE::print() を使う場合は 4096 or 8192 byte 以下に収めること CORE::syswrite() なら混ざらない 男は度胸。flock(2)する ということです。 これでわかった人は読む必要ありません。 以下蛇足。 はじめに perl ではファイルハンドルに書き込むときには何も考えずに CORE::print() を利用しますが、この人はなんかいい感じにバッファリングしたり、長い文字列だったらぶった切ってくれたりしてくれます。 で、普通はバッファリングのことはみんな意識しているので以下のようにヒットアンドアウェイをやったりしますね。close() で自動的に flus

    hiroyukim
    hiroyukim 2014/07/10
    目が痛い
  • にひりずむ::しんぷる - return で返る複数の値は 配列ではない

    return で複数の値を返す場合、配列ではなく、リストとして返る。スカラコンテキストで評価した場合、最後の値が返って来るので注意が必要である。 あんまり正確じゃなかったので>< 16:01 (miyagawa) ( ... ) とか qw( ... ) ってのは「リスト」 16:02 (miyagawa) それを @foo て変数にいれると配列になる 16:02 (miyagawa) my $x = qw( a b c ); 16:03 (miyagawa) http://perldoc.perl.org/perldata.html#List-value-constructors 16:04 (tokuhirom) scalar(qw/a b c/) と scalar(@x=qw/a b c/) のちがいかな というわけで $ perl -E '$x = qw(a b c); say $

    hiroyukim
    hiroyukim 2012/11/15
  • にひりずむ::しんぷる - 親プロセスと子プロセスでデータを送受信する方法のメモ

    pipe() とか socketpair() とか色々方法はあるけど、素直に IO::Pipe 使っとくと簡単便利。コアモジュールですし。 use strict; use warnings; use IO::Pipe; my $pipes = []; my $children = []; for my $i (1..10) { push @$pipes, my $pipe = IO::Pipe->new; my $pid = fork; if ($pid) { # parent $pipe->reader; push @$children, $pid; next; } # child die $! unless defined $pid; $pipe->writer; print {$pipe} "pid: $$, index: $i\n"; exit; } for my $pid (@$

    hiroyukim
    hiroyukim 2012/10/18
  • にひりずむ::しんぷる - Git ライクなコマンドライン引数を処理できる Getopt::Compact::WithCmd を書いた

    近いうちに水性ペンを買います。(挨拶) コマンドライン引数を処理するモジュールっていっぱいありますね!ありすぎてどれがいいかよくわからないし、「まぁぶっちゃけ Getopt::Long さえあれば大体いいよね!コアだし!」って感じですが、まぁなんか書いた。 xaicron's p5-Getopt-Compact-WithCmd at master - GitHub App::Cmdとかありますが、あれはモジュール化しなきゃいけなくて、大変めんどうです。*1 俺は一枚のスクリプトに書きたいんだ!! サブコマンド前提 usage は自動生成 default や required の指定が可能 依存が少ない(かも)*2 という感じです。最初は、Getopt::Compactを継承して書いてたんですが、途中からなんかあびゃーってなったのでやめました。使い方は大体一緒ですが。 Getopt::Com

    hiroyukim
    hiroyukim 2012/04/02
  • にひりずむ::しんぷる - LWP での SSL 接続で certificate verify failed しちゃう件の解決方法

    要は、オレオレ証明書使ってるサーバーに https でアクセスすると die しちゃうわけですが、無視したいときもあるわけです。 そういう時は、 $ENV{PERL_LWP_SSL_VERIFY_HOSTNAME} = 0; とすれば OK ですね。っていうのを zigorou さんに教えてもらいました。ちなみにこの ENV は LWP::Protocol::https にはコードの中にしか出てこなくて、LWP*1 の POD に書かれてました。 あとは、 LWP::UserAgent->new(ssl_opts => { verify_hostname => 0 }); でもいいですね。こっちは LWP::Protocol::https に書いてありました。ちゃんとドキュメント読めって感じですが、LWP はいろんなところに分散していて、ちょっとした機能がなかなか探しづらいですね。 よくみ

    hiroyukim
    hiroyukim 2011/12/30
  • にひりずむ::しんぷる - 忙しくない人のための atsort

    nicesort ってのを書いてみた - kazuhoのメモ置き場 ここまでくればあとは簡単です。みんな大好き at コマンドで sort を書いてみました。 今回は、ファイルに追記していますが、sort の結果をメールで逐次通知したり、irc に流したり、twitter につぶやいたり、ブログに投稿したりと、様々なことができるので、とても便利ですね。 今回は少し忙しかったので、TIME_UTILS に minutes を指定しましたが、通常は weeks あたりでよいでしょう。 #!/bin/sh OUT=/tmp/atsrot.$$ # minutes hours days weeks TIME_UTILS=minutes f() { echo "echo $1 >> $OUT" | at now + $1 $TIME_UTILS > /dev/null 2>&1 } if [ $#

    hiroyukim
    hiroyukim 2011/05/22
  • にひりずむ::しんぷる - Class::C3のお勉強

    Class::C3を学んだ モダパーこと「モダンPerl入門」を執筆したことで知られる牧さんの2007年YAPCのセッションがものすごくわかりやすいのでまずはそれを見ると吉。 (Ab)?using Class::C3 - YAPC::Asia 2007 Tokyo Sessions 以下の例で考えてみる。 AをBとCが継承し、DがBとCを継承しているというダイヤモンド型多重継 全てに「add」というメソッドがある 全ての「add」内ではスーパークラスの「add」を呼ぶ 普通に書くとこうなる #!C:/Perl/bin/perl use strict; use warnings; package Klass::A; sub add { my $self = shift; my $str = shift; return "$str -> Klass::A"; } package Klass::

    hiroyukim
    hiroyukim 2010/04/02
  • にひりずむ::しんぷる - Devel::Peek

    冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech Perl の utf8 関係が未だ全く理解できない。わからないことがわからないので整理 現状やってること * utf8 フラグを全く考慮せずに書き、文字化けした時点で 1. use utf8 つけたりはずしたり 2. utf8::encode, utf8::decode を適当にする モダンなPerlでは use strict; use warnings; use utf8; と書くのが作法ですが、utf8に関しては確かに取っ付き辛かったです。 過去に、 にひりずむ::しんぷる:uft8+Encodeで日語は解決する というような記事を書いたり、ほかの人がいっぱい書いているのでその辺は割愛して、「文字化けした時点で」自分がやっていること use utf8 use Encode スクリプトはutf8で書く 外部か

    hiroyukim
    hiroyukim 2009/09/11
  • 1