以下の内容はhttps://r9.hateblo.jp/entry/20120312/p1より取得しました。


引数が格納される配列@_はローカル変数です

これまでまったく意識したことなかったけれど
@_はlocalだと知ったのでメモ。

sub speak {
  my $w = &_speak_word; # ←引数なし
  print $w,"\n";
}

sub _speak_word {
  my $type = shift; # ←でも引数が取り出せる

  if ($type eq 'laugh') {
    return 'HAHAHA';
  }
  elsif ($type eq 'smile') {
    return 'NIYARI';
  }
}

speak('laugh'); #=> 'HAHAHA'

動く。
いままで_speak_wordが呼ばれた時点で、
sub speakの@_は退避されて新しく@_がsub _speak_wordで生成されるものと思っていた。
だからspeakの引数を_speak_wordに伝えるには改めて引数として明示的に差し出す必要があるかと思ってそうしてきてた。

sub speak {
  my $type = shift; # 引数を先に格納して
  my $w = _speak_word($type); # ←その引数を渡す
  print $w,"\n";
}

こんな感じに。


でも渡された引数と完全に同じ引数で何か呼ぶときは
別に何も渡さないのと同じなようだ。




以上の内容はhttps://r9.hateblo.jp/entry/20120312/p1より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14