Perl

正規表現で先読み

Perlの正規表現には先読み・後読みという機能がある。Rubyにもあるのだけど、OCamlのStrモジュールにはないみたい(PCREにはありそうだけど)。最近、正規表現力が落ちまくっているので、ちょっと練習。数値を三桁ずつカンマ区切りにしてみる。 $ pl 'my $s = …

文字列中の式展開

$ perl sub hoge { "hogehoge"; } print "i am @{[ hoge() ]}.\n"; こうやると i am hogehoge.こうなる。でも、Rubyの方がちょっとスマートか。

非コアでloadしているファイルをみる

$ perl -MDigest::SHA -MHTTP::Request::Common -MLWP::UserAgent -MURI \ -e 'for (sort values %INC) { print "$_\n" if /site_perl/ }' /usr/lib/perl5/site_perl/5.8.8/HTTP/Date.pm /usr/lib/perl5/site_perl/5.8.8/HTTP/Headers.pm /usr/lib/perl5/sit…

cpan urllistの編集

perl cpanコマンドのoコマンドを使うと、shift/unshift, push/popで扱える。 cpan[16]> o conf urllist urllist 0 [http://ftp.nara.wide.ad.jp/pub/CPAN/] cpan[17]> o conf urllist push ftp://ftp.u-aizu.ac.jp/pub/CPAN ftp://ftp.kddilabs.jp/CPAN/ ftp…

Digest::SHA256の使い方ではまる

しょぼすぎるミスをしていたので自戒をこめてメモ。 % cat sha256.pl use strict; use warnings; use Digest::SHA qw(sha256_hex); my $digest = Digest::SHA->sha256_hex("12"); print "$digest\n"; $digest = Digest::SHA::sha256_hex("12"); print "$dige…

UTF-8文字の削りかす除去

no utf8の状態で、バイト単位のsubstr()を使って、末尾が不完全なUTF-8文字になってしまった際の、削りかす除去。 $data =~ s/(?:[\xC0-\xDF]|[\xE0-\xEF][\x80-\xBF]{0,1}|[\xF0-\xF7][\x80-\xBF]{0,2})$//; こんなんで良いのかしら。あと、2バイト文字の確…

ddclientとIO::Socket::SSL

自宅サーバーではdyndns.com & ddclientを使っているのだけど、気がついたら以下のエラーをはいて、更新失敗していた。 WARNING: cannot connect to members.dyndns.org:443 socket: IO::Socket::SSL: Time out IO::Socket::INET configuration failederror:…

出力時のバッファリング解除

いつも忘れるのでメモ。 $| = 1;

無名ハッシュ生成時のメモリコピーの補足

先日の日記の実験だけど、一休みして考えると何に混乱していたのかわからない内容だ。どっからcopy on writeなどという妄想が出て来たのだろうか…ベンチマーク実験も全てのケースにおいて無名ハッシュ生成時のメモリコピーは行われている(と思う)。無名ハ…

ハッシュ生成時のメモリコピー

ハッシュが余りに便利すぎて半笑いなのだけど、性能的にメモリコピーが気になった。 use strict; use warnings; my $str = 'string_hogehoge'; my $hash = { data => 'hash_hogehoge', }; sub hash_from_array { my $arg = {@_}; $arg->{data} = 'changed_in…

LOBの扱い

やっぱりちょっとはまったのでメモ(というかコードの断片貼り付け)。

動的にuse

ちょっと調べてみたけれど、現状すっきりしているのは以下かなぁ? $ cat dyn_use.pl use Data::Dumper; my $pkg = "CGI"; eval "use $pkg;"; my $obj = $pkg->new; print Dumper $obj; これで $ perl dyn_use.pl $VAR1 = bless( { '.parameters' => [], 'us…

小数点

Cとは異なり、除算で割り切れない場合、小数点付きの値を返すんだなぁ。 $ perl -MShell my $v = 64/3; print $v; 21.3333333333333 $ perl -MShell my $v = 64/3; print int($v); 21

クラス名の取得

__PACKAGE__でいいや、と思っていたら、継承しているケースでちょっとはまった。親クラスのパッケージで__PACKAGE__すると、インスタンスは子クラスであっても、親クラスのパッケージ名が取れるのか… ということでインスタンスをスカラーコンテキストで評価…

最近使ってみたモジュールで幸せになれたもの

FindBin Apache CGIでやっている限りではそれ程恩恵を受けなさそう(use lib '../lib'でやり過ごせた)だけど、prove -r による再帰的なテストやその他で幸せになれた。 LWP 最初意地を張ってIO::Socket::INETで頑張ろうかとも思ったのだけど、つまらない意地…

speedycgiがやっぱり早かった件

負荷かけて試してみたら素のcgiより10倍程度早かった。cpu使用率やメモリもかなり軽くなっていた。久しぶりにソース見ようかなぁ。pthread周り追いかけるより楽しそうだし…よし、その線でいってみよう!来週以降…

AUTOLOAD

やっとAUTOLOADまでたどり着いた。CGIのディスパッチ周りで使ってみようかと思っているのだけど、何となく性能が悪そうな気が。色々探していたらAUTOLOADとシンボルテーブルに関するパフォーマンステスト - Accept Thingsを見つけた。なるほど、毎回毎回AUTO…

非同期処理関数

少し前の日記で書いた関数CGI用関数はCGI用なのだけれども、stdout, stderr閉じ忘れていたのでちょっと修正。 sub async(&@) { my $async = shift; unless (my $pid = fork()) { close(STDOUT); close(STDERR); # 子プロセスは裏で指定された処理を行う eval…

CPAN一括

要更新のパッケージを一覧表示 perl -MCPAN -e "CPAN::Shell->r"またはshellに入ってr。要更新のパッケージを一括更新 perl -MCPAN -e "CPAN::Shell->install(CPAN::Shell->r)"

プロトタイプと無名サブルーチン

ちゃんとしようと思って、ラクダ本「6.4 プロトタイプ」を見てみた。 やはり強力なのはid:fbisさんに教えていただいた無名サブルーチンみたい。 ちょっと業務で非同期に動かしたい処理があったので、応用してみた。 sub async(&@) { my $async = shift; unle…

無名サブルーチン

昨日初めて知ったのだけど、 これを使えばRubyのブロックっぽいことができるのかな?と思って実験してみた。 #!/usr/bin/perl auto_open_close("hogehoge", sub { my $fh = shift; my @lines = <$fh>; print @lines }); sub auto_open_close() { my $fpath =…

[oracle] [apache] LD_LIBRARY_PATH

どうもhttpd.confでSetEnvするしかなさそうな気配。 プログラムで吸収できないか強引にやってみたが、成功したのはトリッキーな以下のコード。 BEGIN { ★各CGIにBEGINブロックを追加 unless ($ENV{'FLG_EXEC'} eq 'hogehoge') { $ENV{'FLG_EXEC'} = 'hogehog…

ファイルハンドルの渡し方

CGIアップロード関連ライブラリのテストコード作成中に、ふと悩んだ。open(IN, '〜〜〜〜')とか open(CMD, 〜〜〜〜〜 |')とかいつもやっているけど、 そのファイルハンドルを関数に渡すときってどうやるんだっけ…?ラクダ本全部読んでないので(この時点で…

数値チェック

数値かどうかのチェックの処理で $var = shift; $var =~ /^(\d+)$/; $var = $1; die 'hogehoge' unless($var);みたいに書いてしまったのですが、 $varに0が入っていた場合、unless($var)が成立してしまうので、 die 'hogehoge' unless(defined $var);にしな…

初のperl開発(久しぶりのWebアプリ開発)

今月はperlでのWebアプリ開発が舞い込み、大喜びで開発していました。perlはテストツールレベルで使用していましたが、本格的にWebアプリの開発で使用するのは初めてです。これを機に一から基礎をうっすらと勉強してみました。感想を列挙すると… 今まで業務…