2009-09-01から1ヶ月間の記事一覧

便利コマンド

ack ちらっと使っているのを見て便利そうだったので、VMwareにも入れてみる。 インストール sudo perl -MCPAN -e shell install App::ack 使い方 ack [pattern] [dir/file] ll ls -l のエイリアスとは知らなかったorz

each, keys, values

eachはリストコンテキストではkeyとvalueのセットを1つずつ取り出す。スカラーコンテキストではkeyのみ。 keysはすべてのkeyのリストを、valuesはすべてのvalueのリストを返す。 use strict; my %hash = ('key1' => 1, 'key2' => 2, 'key3' => 3); while ((m…

delete

配列およびハッシュの要素を削除する。 配列の場合、長さは変わらず空要素になる。つまりundefしたのと同じ。 use strict; my %hash = (key1=>"value1", key2=>"value2", key3=>"value3"); delete($hash{key1}); if (exists($hash{key1})) { print "ここは出…

undef, defined, exists

perlにおける未定義値はundef。これはmy $var;と同値である。 変数の値が定義されているかは、defined関数で調べる。 hashのキーが定義されているかはexists関数。 use strict; my $var; my $foo = undef; print "\$var eq \$foo is TRUE\n" if ($var eq $fo…

調べたことメモ3

sql

ロックの種類 ロックの粒度によりテーブルロック、ページロック(メモリのセグメント)、行ロックの3つに分けることができる。MySQLのInnoDBは行ロックを採用している。 デッドロック 2つの異なるトランザクションにおいて、互いにロック解除を待機している…

調べたことメモ2

sql

サブクエリ 相関サブクエリと非相関サブクエリがある。 前者はサブクエリ内でメインクエリの列を参照しているもの。後者は単体で実行できるもの。 式が使える場所ならどこでも使える。 一時テーブル的にfromにも。 select * from user where user_id = (sele…

調べたことメモ

sql

distinct 指定した列の重複を除くキーワード。データの並べ替えが必要なので遅いらしい。 30万レコードくらいのデータで試してみる。 select distinct user_id, content from data; 299990 rows in set (7.82 sec) select user_id, content from data; 30000…

結合(JOIN)

sql

昔やったけど、うろ覚えだったので今回きちんと整理してみる。 結合には大きく分けて2種類。内部結合(INNER JOIN)と外部結合(OUTER JOIN)がある。 内部結合 結合条件に指定したidが両方のテーブルに存在する場合のみ結果セットに含める SQL構文はINNER JOIN …

よく使うコマンド

sql

実行結果をファイル出力 echo " select * from table limit 10; " | mysql -h*** -u*** database > ~/data.tsv IndexやDataのsizeを知る show table status from [db_name] like '[table_name]' \G テーブルスキーマを調べる show create table [table_name]…

cakePHP国際化

php

http://cakephp.seesaa.net/article/87269708.html http://blog.asial.co.jp/377いじょ。

undef

my $hoge; print "\$hoge is undef\n" if ($hoge eq undef); print "\$hoge is undef\n" if ($hoge == undef);

ハッシュ化

パスワードを平文で保存しては危ないのでハッシュ化するのだけれど、少々調べてみた。 まずcrypt関数。マシン依存でDES暗号かMD5ハッシュになるのだそう。 print crypt("hoge", "1234567"); 12.aCGsm0z7ngが戻ってきたので、使っているのはDESの模様。 そも…

配列

いまさら感はあるが、知らないことがあったので書いてみる。 まずスライス。 my @list = (0..9); print @list[3..5]; #$list[3], $list[4], $list[5]を要素に持つ print @list; #@listはそのまま 続いてsplice(スプライス) こちらは配列要素を切り取る。第…

デバッグ

perl -d script.pl 最低限以下だけ覚えておけば使えそうな気がする。後はhelp&使いながら覚える戦法。 h #ヘルプ s #ステップ実行 l #次の行表示 b #ブレークポイント設定 d #ブレークポイント解除 V PKG VARS #パッケージ変数 y #レキシカル変数 T #スタッ…

Necessity to use Index

sql

SQLに疎いのでインデックスの有無によりどれくらいレスポンスが違うのか試してみた。 スキーマはこんな感じ。post_dataにはuser_id, post_dateでインデックスを張る。 create table post_data ( post_id int unsigned not null, #投稿ID user_id int unsigne…

pack/unpack

理解できていなかったので、色々やってみる(scriptの文字コードはEUC) まずはpack。 print pack('CC', 97, 0x61), "\n"; print pack('C2', 97, 0x61), "\n"; print pack('B16', '0110000101100001'), "\n"; print pack('H4', 6161), "\n" 実行結果。 aa aa…

cakePHP設定

php

ひとまずの動作確認が終わったので、開発の下準備。 Deprecatedを消す PHP5.3+cakePHP1.25だとDeprecatedが出まくってウザイので、消す。 cake/libs/configure.phpの290行目あたりで、E_ALL & ~E_DEPRECATEDにする。 if (isset($config['debug'])) { if ($_t…

文字、バイト、正規表現

理解があいまいなので、試しに色々書いてみる。 まずはeuc-jpでスクリプトを書いてみる。 my $str = "漢"; print ".は文字にマッチする\n" if ($str =~ /^.{1}$/); print ".はバイトにマッチする\n" if ($str =~ /^.{2}$/); 「.はバイトにマッチする」が出力…

tie変数

tie変数は普通の変数のように見えて実はオブジェクトな変数。スカラーのtie変数の書き方 (ほとんどプログラミングPerl丸うつし) use strict; package Person; sub TIESCALAR { bless (\my $name, shift); } sub STORE { ${$_[0]} = $_[1]; } sub FETCH { $…

サブルーチン

引数を指定しないと、暗黙に@_が渡される。 かつ引数は参照渡しになる。 my @list = qw(1 2 3 4 5); test(@list); sub test { &print_args; &change_args; &print_args; } sub print_args { print "@_\n"; } sub change_args { @_ = qw(6 7 8 9 0); } 実行結…

オブジェクト

オブジェクト指向なモジュールの書き方を勉強したけど、忘れてた。 プログラミングPerlのコードをちょこっと変えたものを書いてみる。 モジュール package Person; use strict; #引数を受け取るコンストラクタ sub new { my $invocant = shift; my $self = b…

定数のつくりかた

use strict; *PI = \3.141592; print $main::PI,"\n"; #上書きしようとするとエラー => 定数! #our $PI = 1234; #print $PI,"\n";

シンボルテーブルと型グロブ

なんとなくは理解していたけど、さらに理解を深めるためにコードを書いてみる。 use strict; our $foo = "This is foo."; sub foo { print $foo, "\n"; } our $bar = "This is bar."; sub bar { print $bar, "\n"; } print "1.----\n"; #型グロブ *hoge = *f…

シンボリックリファレンス

人に説明できるほど知らなかったので調べてみた。 プログラミングPerl P304から引用。 ハードリファレンス以外の値をデリファレンスしようと試みると、何が起こるだろうか?その場合には、値はシンボリックリファレンス(symbolic reference)として扱われる。…

ワンライナー

datファイルを1行ずつ出力 perl -e 'print $_ while (<>)' dat datファイルのうち、Kotaroにマッチする行を出力 perl -n -e 'print "$_\n" if m/Kotaro/' dat datファイルを置換して出力 perl -p -e 'print s/Kotaro/Taro/' dat numファイル中にある数字表…

Encode

よく理解していなかったので、覚えたことを書いておく。 エンコード変換 入力されるファイルはutf-8で、Linuxの文字コードはeuc-jp前提。 use strict; use Encode; open (my $fh, "<$ARGV[0]"); while(<$fh>) { chomp; Encode::from_to($_, "utf-8", "euc-jp…

正規表現

先読み 先を読む=現在位置よりも前を覗き込み。 正規表現的には幅0の文字、つまり位置にマッチ。 (?=some_regex) #肯定先読み (?!some_regex) #否定先読み 後読み 後から読む=現在位置よりも前を覗き込み。 正規表現的には幅0の文字、つまり位置にマッチ。…