Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

ラベルでつまる

いまテストをこんな風に書いている。

GET_COOKIES :
{
  local $ENV{HTTP_COOKIE};
  local $ENV{COOKIE};
  ...
  my %result = get_cookies();
  ...
}
SET_COOKIES :
{
  stdout_is {
    set_cookies(
      ...
    );
  }
}

テストするサブルーチンの名前をそのままテストブロックのラベルに使用している。
大文字にすればかぶらないと思って。
で。
ちょとややこしそうなテストがあったので先に以下のように書いておいたらエラーになった。

...
CRITICAL_ERROR :
{
}
GET_COOKIES :
{
...

$ prove -l t/01-cm.t
syntax error at t/01-cm.t line 17, near "GET_COOKIES "
Execution of t/01-cm.t aborted due to compilation errors.
...

おや syntax error。
全然まちがってないように見えるのだけれども。
考えられるとしたら、{}のブロックが無名ハッシュリファレンスにとられている、とか?


なので、

...
CRITICAL_ERROR :
{
  ;
}

のように間にセミコロンを一つ挟んだらうまくいった。
perldoc も探したけど、見つけられなかった。


よくわからん。