Perl の SUPER 擬似クラス - メモ -

SUPER擬似クラスは, ベースクラスのことを指すのだそうです.

use base qw (Hoge::Fuga::Base);

~~ ry) ~~

sub new {
my ($class, $args) = @_;
~~ ry) ~~
my $obj = $class->SUPER::new(\%new_args);
~~ ry) ~~

}

などとするときのSUPER::new は Hoge::Fuga::Base のものということですね.

勉強になりました.


Ref.
http://ja.wikibooks.org/wiki/Perl/%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%83%BB%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%81%A8%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E6%8C%87%E5%90%91

while とか for とか復習

while (条件式)
条件式が真なら常に実行.
よって,

while(1)

while(@array)

とかやると,
()内は常に真なので, 無限ループ.


foreach ()
配列全体やリスト処理をするためのもの.
()内から値のリストを受け取り, それぞれの値に対して一回ずつコードのブロックを繰り返し実行.
だから

for (@array)

とかってやると, 配列の要素数だけ繰り返し実行.

否定演算子 ! のメモ

否定演算子 (!) は 0 とか undef が義, あとは真.
defined は undef 以外は真.

hash要素の存在確認は, exist
exists $math_scores{$key}



Ref.
http://fleur.hio.jp/perldoc/mix/pod/perl5100delta.mix.html
http://d.hatena.ne.jp/perlcodesample/20080213/1202911471

Perl の undef の取り扱いの注意 #1

use strict;

$hoge = undef;

if ($hoge == 0) {
print "fuga\n";
}

if ($hoge eq '') {
print "foo\n";
}

これ, use strict してても実行すると,

fuga
foo

ってでます.
$hoge が 数字とか文字とかと比較されると,
Perl は勝手に気を使って, 数字っぽく ないしは 文字列っぽく 扱ってしまうみたいです.

テストするときなどは, ちゃんと defined してからにしましょう.

use strict;

my $hoge = undef;

if (defined $hoge) {
^---if ($hoge == 0) {
^---^---print "fuga\n";
^---}

^---if ($hoge eq '') {
^---^---print "foo\n";
^---}
}

MySQLでインデックスが効いているか確かめる方法

explain SELECT ~~

もしくは

desc SELECT ~~

これで調べられる.

possible_keys は候補の鍵,
key は実際に使われている鍵.

mysql> explain select id from data where id=10102 and flg!=2;

                                                                                                                                                                                                              • +
id select_type table type possible_keys key key_len ref rows Extra
                                                                                                                                                                                                              • +
1 SIMPLE user_card ref PRIMARY,i2 PRIMARY 4 const 18 Using where
                                                                                                                                                                                                              • +

1 row in set (0.00 sec)

git commit の訂正など

コミット情報の削除は reset 使って, git show HEAD~1 , git show HEAD~2 とかやって確認したあと, 2つ前のコミットに戻したいなと思ったら, git reset HEAD~2とかする.

でも, reset だけだとコミット情報を削除しますが, 作業ツリーは維持されます.
コミット情報削除とともに作業ツリーもそれに合わせたい場合は --hard オプションをつけましょう.

git reset --hard HEAD^