この記事は abicky.net の 初めて Perl でコードを書く時に知っておきたかったこと に移行しました
こちらで続けようと思います。 とりあえず、CentOS5、CentOS6の共生と cpanmでのImage::Magick の取り扱い、Imagerがいまいち美しい処理をしてくれないあたりが目下の目標です。
株式会社ミクシィの長野です。memcachedの連載も今回が最終回になります。前回までmemcachedに直接関連する話題を中心に書いてきましたが、今回はmixiでの事例や運用に関する話題、memcachedの互換アプリケーションについて紹介します。 mixiでの事例 mixiではサービスの初期の頃からmemcachedを利用していました。memcachedはサイトへのアクセスの増加が、データベースのスレーブを増やしていく方法では追いつかないほど急激にのびていく中で導入して行きました。加えてスケーラビリティを向上させていく手段として検証を行い、十分な速度と安定性があることが確認できたことも導入の理由になります。現在ではmemcachedはmixiのサービスを提供していく中で非常に重要なコンポーネントとなっています。 図1 現在のシステムコンポーネント サーバ構成と台数 mixiではデータベ
Memcachedは色んなサービスで使われていますね。 ということでPerlからMemcachedを使う方法についてを簡単に書いてみます。 Cache::Memcached::FastのPODのままじゃないかというツッコミもありますがその通りです。。簡単で使いそうな部分だけを取り上げているので詳しくはPOD見てください。 http://search.cpan.org/dist/Cache-Memcached-Fast/lib/Cache/Memcached/Fast.pm Memcached? ものすごくざっくりいうと分散メモリキャッシュサーバーというもので、メモリ上にデータを保存出来て取り出せるというものです。ファイルに書かれた設定やDBのデータをメモリ上にのせておくことで高速にデータの取得を行うことが出来るようになります。 詳しくはgihyo.jpにあるkazeburoさんの連載を見て
プログラム文中に記述している設定値を外部ファイルに出したい場合、doを使うと簡単に実装できる。 まず設定ファイルだが、下記のようにハッシュ形式で作成する。(ここではファイル名はparam.cfgとして保存する) { #コメントも使えます dataDir => '/aaa/bbb/ccc/', logFile => 'abc.log', users => [qw(A001 A002 A003 A004)], mail => { mobile => 'aaa@bbb.ccc', company => 'ddd@eee.fff' } } 次に、この設定ファイルを呼び出すプログラム側を作成する。 use strict; use warnings; use Data::Dumper; #設定ファイルのパス my $file = "./param.cfg"; #設定ファイル読込 my $conf =
処理対象ファイルをバッチファイルにドラッグ&ドロップすると、そのファイルを引数にしてperlスクリプトが実行される。 例:WindowsのパフォーマンスモニタのログをCSVに変換する場合 処理対象ファイル(SystemLog20090122_000004.blg)をバッチファイル(feedme.bat)にドラッグ&ドロップすると、そのファイルを引数にしてperlスクリプト(myscript.pl)が実行され、CSVファイル(20090122.csv)が作成される。 file name: feedme.bat rem "myscript.pl"を書き換えてご使用ください echo off cd /d %0\.. perl myscript.pl %1 pause file name: myscript.pl #パフォーマンスモニタのログファイルをCSV形式に変換する use strict;
とあるDBを利用したバッチ処理をやらせようとした時に #スクリプトの一部分 my @list1 = (適当なリストその1); my @list2 = (適当なリストその2); foreach my $value1 (@list1){ foreach my $value2(@list2){ #DBに接続して、あるテーブルのレコード件数countする→ #その結果を別テーブルにUPDATEするSQL実行処理; } }というまあ、foreachでグルグルグルグル回すスクリプトを書いたんですね。 で、まぁこれがクソ重かったんですね。テーブルのデータは全部メモリ上に載っているんですが、 10GB(1億レコードぐらい)ぐらいのテーブルで順番に$value1,$value2の変数を条件に使ってCOUNT()を使用した SELECT文を投げるので、一つのSQL投げたらDB側のCPUコアが100%になってし
各種メソッドの挙動。 use URI; use Data::Dumper; sub p { local $Data::Dumper::Indent = 1; print $_[0]; print Dumper($_[1]); } my $url = 'http://example.com/foo/bar/00000.html?uid=aaaa&hoge=あああ'; my $uri = URI->new($url); p 'scheme :',$uri->scheme; p 'opaque :',$uri->opaque; p 'path :',$uri->path; p 'fragment :',$uri->fragment ; p 'as_string :',$uri->as_string; p 'canonical :',$uri->canonical; p 'authority :'
CGI・Perl例文集 CGI(Perl)のサンプルプログラムをコピー&ペーストで使える便利集! カテゴリー:リスト(配列) 配列の要素数を調べる 配列に今どれだけの要素が詰まっているかカウントしたい。これには大きく二つの方法が用意されている。 「$#配列名」とする方法と、スカラー値として値を得る方法の二つがある。前者と後者で得られる値が違う点に注意すること。「$#配列名」は配列のインデックス(添え字)に忠実で、「最大数 - 1」の結果が返ってくるのに対し、後者は最大数がそのまま返ってくる。 #!/usr/bin/perl ;# ;#配列の要素数を表示 ;# #---------------------------------------# #準備 #---------------------------------------# @array = (1..5); #1~5の値を入れ
Perl › モジュール › here 日本語などのマルチバイト文字をPerlで適切に扱うにはEncodeモジュールを使用します。次の3つのことを覚えておけば多くの場合適切に日本語を扱うことができます。 外部から入力された文字列はEncodeモジュールのdecode関数でデコードする 外部へ出力する文字列はEncodeモジュールのencode関数でエンコードする ソースコードはUTF-8で保存しutf8プラグマを有効にする この解説での用語 この解説では外部から入力された文字列のことを「バイト文字列」と呼ぶことにします。Perlの内部表現に変換された文字列を「内部文字列」と呼ぶことにします。また「バイト文字列」が特定の文字コードで記述されている場合は「UTF-8バイト文字列」「Shift_JISバイト文字列」などと呼ぶことにします。 プログラミングで日本語を扱う場合にその文字列がバイト文字
Perl における文字コードについて曖昧な理解だったので勉強がてらまとめてみる。 とあるPerlアプリケーションを修正したくて挙動をしらべたところ、length($str)が文字数じゃなくてバイト数を返しているのが原因と分かった。しかし、関連しそうなトピックをググっても、Perl に詳しい人がまとめた解説が多く引っかかるのだけど、基本的なことが分かってない自分には高度過ぎてよくわからない。しかも perl 5.6 以前 -> 5.6 -> 5.8 あたりでドラスティックに変更されているようで、そのへんの事情に疎い自分はどの情報を信じればいいのかよくわからない。(が、一番わかりにくくなっている原因は "UTF8" と "Perl内部エンコーディング" の妙な交換可能性だと思う。まるでCのポインタと配列みたいだ) というわけで、主にEncode(3pm)で調べた結果をまとめておく。動作確認は
文字列 数値をASCII(アスキー)コードに対応する文字に変換するには、chr関数を使用します。 #!/usr/bin/perl use strict; use warnings; # ASCII文字コードでは65,66,67はそれぞれ 'A','B','C'に対応する。 my $a_num = 65; my $b_num = 66; my $c_num = 67; print chr( $a_num ), "\n"; print chr( $b_num ), "\n"; print chr( $c_num ), "\n"; __END__ 続きを読む
[Perl] Perlモジュールの書式は大抵以下のようになります。 package 任意のモジュール名; use Exporter; @ISA = qw(Exporter); @EXPORT = qw(sub1, sub2); #Exportするルーチン sub sub1{ . . . } sub sub2{ . . . } スクリプトから作成したモジュールを読み込みにはuse文を使用します。 [例] use モジュール名 モジュールのサブルーチンを呼び出すには&sub1()などとすればOK。以下実例。 [モジュール: Category.pm] package Category; use Exporter; @ISA = qw(Exporter); @EXPORT = qw(new show_parent); sub new { my $pkg = shift; my $self; { m
use Time::HiRes; my $start_time = Time::HiRes::time; #-------------- #てきとーな処理 #-------------- #処理時間を計算して小数点以下を3桁に丸めて表示 printf("%0.3f",Time::HiRes::time - $start_time);
Perlのプログラムではまった。二度と繰り返したくないので個人的に記録にとどめておきたいと思う。 まず実装したかったのは(しなければならなかったのは)htmlファイルのソースを読み込んで正規表現で置換したのち、別ディレクトリのファイルにはき出す、というものだ。 まず、最初はRubyでHpricotなんかを使って作った。これにはさほどはまらなかったように思う。だが、先方の理由により、Rubyは使えないということでボツ。 次にPerlで、となるのだが、これもRuby同様にWeb::Scraperなんかを使ってパースかけて処理しようと企むが、機能が実現した後、正規表現の方がよいとわかって一回ボツ。 シンプルにLWP::Simpleを使ってurl指定した先のソースを変数に格納して処理したのだが、これまた先方の「モジュールいれられない」との理由でボツ。LWP使わないでどうやってすんの?とか思ったが、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く