夜も更け、無性に打ちたい気分になったので新宿へ遠征。風速0.5の店で朝まで遊んだ。ブランクを経て再開後は、再構築したセオリーに沿って打つ中でなかなかブレイクスルーがなく、二着三着ばかりのゲーム代負けが続いていた。
しかし、今日はいろいろうまく行って前日に続く連勝。昨日、ひさしぶりに役満をあがったことと、それですぐに引き上げたことで、二重に落ち着きを得たのかも。しかしまあ、睡眠と栄養と時の運と思っておくのが無難だろうね。ただ、オリと喰い仕掛けの閾値を下げ、決断を早めるようにしたことは成績に寄与したと思う。
昨日は麻婆豆腐を食べ損ねたので點(とむす)か希須林小澤に行こうと思ったが、時間が遅すぎて閉まっていた。むー。まあ、せっかく歩いてきたのでフレッシュネスバーガーに入ることにした。
クラシックチリチーズバーガーという新作と、ベーコンオムレツバーガーと、スイートポテトのフライと、チャイを注文。新作はなかなかうまい。ベーコンオムレツやサツマイモのフライはほかにはあまりないので、ひさしぶりにフレッシュネスバーガーを堪能したという感じ。チャイはもうちょっとスパイスに工夫がほしい気もしたが、ハンバーガーのお供なのでこのくらいか。
阿佐ヶ谷はモス、フレッシュネス、ヴィレヴァンダイナーとそろっているのが便利。そのときの気分に従って使い分けています。
SoftBank 911TとSony DR-BT21Gの組合せでハンズフリー通話がうまくできていなかったのだが、解決した。911T側の登録デバイスをいったんすべて消して再度DR-BT21Gを登録し、911T側から「接続」してみたら、以降はちゃんとA2DPとHFPで同時接続されるようになった。
同時接続していることは、DR-BT21Gのマニュアルにある通り、LEDの点滅パターンで分かる。今まではA2DPのみだったので、ぴかぴか、と点滅の間隔が短かったが、同時接続時は青がぴか、ぴか、とゆっくり二度点滅してしばらく休み、を繰り返す。また、着信音ピコーン、ピコーンからピョロロロロ、に変わった。
音楽再生中も問題なく着信できるし、発信もできる。これは快適だ。でも、ヘッドホンだけで会話していると不審がられそうなので、右手で着信ボタンを押したらそのままヘッドホンに添え、左手を口に当てて通話してますよポーズを取ることにしたよ。
Perlは配列とリストを区別しているが、これが時に罠になる。
次のスクリプトが、何を表示するか予想できるだろうか。
#!/usr/bin/perl
sub f {
return ('a','b','c','d');
}
my $count = scalar(f());
warn $count;
関数が配列を返して、その要素数を取っているのだから「4」かな…と思いきや、答えは「d」。なんで?
まず、関数fは配列を返さない。返すのはリストである。括弧にだまされそうになるが、return文における括弧はC同様に意味を持たない。括弧を外しても結果は同じなのは試してみれば分かる。というか、括弧を付けても配列になるわけではなかった。returnを除いても、括弧を二重にしても同じ。配列に代入して初めて配列になる。(追記しました)
次に、リストをscalar contextで評価すると、要素数ではなく末尾の要素を返す。意図的な挙動なのかは不明だが、スタック構造上そうなるだけかもしれない。
いずれにしても、リストを返すような実装ははまるので避け、明示的に配列を生成して返した方がいいだろう。あるいはwantarrayを見て、偽ならば次のような値を返すように関数を書けば便利かもしれない。
- イテレータやハンドル
- 最初の要素
- 配列のリファレンス
- 要素数
リストをfirst class objectとして扱えないにも関わらず、こんなところで配列との区別を意識しないといけないのは欠陥のようにも思えるが、どうだろう。
また、contextの罠もはまるとなかなかに痛いので、それはまた別途書くことにする。