Perlについての質問箱 53箱目
■ このスレッドは過去ログ倉庫に格納されています
0562デフォルトの名無しさん
2012/07/28(土) 08:35:41.11@::event = (
[sub{真偽判定文}, sub{実行したい処理}],
[sub{真偽判定文}, sub{実行したい処理}],
);
みたいな感じになってる。
実際の代入は $::event[\d+] = [sub{真偽判定文}, sub{実行したい処理}];
の形式で行うため、順番が飛ばされて未定義値の場合もある。
(例えば$::event[6]が存在するが$::event[5]が存在しない場合も起こりうる)。
また、実行順が変わると困るものがあるので@::eventはハッシュにはできない。
# $_[1]()を先頭に書けるケース。条件判定がひたすらうざい。
$_->[1]() foreach (grep { $_ and $_->[0]() } @::event);
# ifが修飾子に使えるがブロックになってるのであんま意味ない。
foreach (@::event){ $_->[1]() if( $_ and $_->[0]() ) }
# grepを使ったケース。利点はない気がする。
grep { $_ and $_->[0]() and $_->[1] } @::event;
# foreachを修飾子に使えるケース。$_[1]() が先頭にこない。
$_ and $_->[0]() and $_->[1]() foreach (@::event);
# もし書けるならこれが一番見やすいのに。
$_->[1]() if( $_ and $_->[0]() ) foreach (@::event);
いい呼び出し方教えてください。
これがいいって確信を得られなくて、気持ち悪くて進めん。
なお、@::eventの構造を変えるのは、すごくいいのがあれば可。
ちょっといいだけなら書きなおさない。
■ このスレッドは過去ログ倉庫に格納されています