読者です 読者をやめる 読者になる 読者になる

前回のミス

ランダムジャンプのほうで、ちょっとミスというかなんというか。

$array->[ int rand $#{$array} ]->{uri}

こうすると、ひとまずだいたい動くんだが、よく考えてみるとちょっとだけおかしい。分解して考ると…intは引数の小数点以下を切り捨てる、randは0以上引数未満で乱数を返す、$#{$array}は配列の最後尾のインデックスを返す…そう、リストの最後にはジャンプしないのだ。リストの最後まできちんとジャンプするためには、次のようにすれば良い。

$array->[ int rand scalar @$array ]->{uri}

配列はスカラーで評価すれば中の要素数を返す。スカラーで評価したいが不安なときは(私はそれなりにそういう状況があるのだが)scalarを使えば確実。

たくさんあるURIのなかで、犠牲になるのはたった一つ、しかも次の瞬間にはリストから無くなるだろうものだが、きちっとやるなら上記のコードで。

補注:わざわざ配列にハッシュリファレンスを入れてnameとuriをとっているが、実際に使うのはuriだけなので、構造化する必要は全くない。nameもとれるんだよーというだけの意味だ。