Perl日記

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

組込み関数lock

10分はまったのでメモ。
現在編集中の画面をロックする、という意味のロックサブルーチンを作って、コールするプログラムを書いた。

my $lock_time = lock($arg1, $arg2, $arg3, $arg4);
...
sub lock {
  my ($arg1, $arg2, $arg3, $arg4) = @_;
  ...
  return;
}

しかしsyntax チェックで警告が出る。

$ perl -c Edit.pm
Useless use of private variable in void context at Edit.pm line 292.
Useless use of private variable in void context at Edit.pm line 292.
Useless use of private variable in void context at Edit.pm line 292.
Edit.pm syntax ok


うえ、まあok出てるし動かしてみよう、と動かしてみたらロックがかからない。
これは…、警告が絡んでるとみて間違いなさそう、と睨みながら色々やってみた。


サブルーチン自体にもコールの仕方も間違いなかったので、確実に「自分の」lock()を呼ぶために「&」をつけて試したら警告が消えた。

my $lock_time = &lock($arg1, $arg2, $arg3, $arg4);

ああ、そうか、lockって組込みであるんだ…、と初めて知る。
flockは見たことあったけど、へぇ、lockもあるとは。

$ perldoc -f lock

lock - perldoc.perl.orgperlfunc - Perl 組み込み関数 - perldoc.jp
弱いキーワードだから、コールよりも先に定義しておけば、問題なかったらしい。
今回は不幸にも(今後を考えたら幸運かも)そうではなかったので、ちょっとした壁に衝突したようである。