8

動的スコープを実装して、私はを使用してlocalいました。それから私はこの投稿に出くわしました、それは次のように言っています:

なぜローカルなのですか?答えは90%の歴史です。Perlの初期のバージョンには、グローバル変数しかありませんでした。localは実装が非常に簡単で、ローカル変数の問題の部分的な解決策としてPerl4に追加されました。

...ローカルは使用しないでください。

その使用は非推奨ですか、または推奨されていませんか?はいの場合、代替手段は何ですか?

4

3 に答える 3

26

リンクした投稿は誤解を招くか、少なくとも不完全です。local字句変数を作成するために決して使用してはならないのは事実です。それはそうしません、そしてそれmyが目的です。

ただし、実際の機能が必要localな場合は、グローバル変数に一時的な値を与える場合に使用する必要があります。これは、Perlの特殊変数を一時的に設定するために最もよく使用されます。古典的なケースは次のようなものです。

{
    local $/;
    $entire_file = <$filehandle>;
}

ファイル全体を一度に読み取るには、レコード区切り文字を未定義に設定する必要があります。しかし、あなたはそれを一時的にやりたいだけです。したがってlocal、使用する必要があります。

これは絶対に推奨されません。これは優れたPerlコードと見なされます。

更新:記事には、「ローカルを使用しない」というステートメントを修飾するメモが実際に含まれていることがわかります。それでも、そのような包括的な発言をすることは誤解を招くと思います。私はそのメモが反応している批評家に同意します。上記の例は非常に一般的な基本的なケースでありlocal、その静脈には他にもいくつかの一般的な使用法があります。

初心者向けのチュートリアルでは、物事をシンプルに保つ必要があることを理解していますが、シンプルである必要はなく、不正確である必要はありません。 「今のところ、心配する必要はありません。 「」をlocal使用するだけでも同じように明確で単純ですが、ローカルを使用してはいけmyないと誰かに誤解させることはありません。

于 2013-01-22T12:00:16.673 に答える
5

myローカル変数を作成するために使用します。これは、ほとんどの場合、人々が望むものです。

現在のブロックの後に復元されるグローバル変数に別の値を設定するlocalということだけを行うために使用するのは問題ありません。localこれは決して非推奨ではありません。これは安定していて、十分にサポートされており、Perlの重要な機能です。(ただし、ローカル変数を作成するのと同じくらい頻繁に、人々が望んでいることではありません。特に、多くの初心者はこれを行う必要はありません。)

推奨されないのはlocal、ローカル変数の作成を試みるために使用することです。これは、ローカル変数をmy使用する必要があるためです。これを使用する理由はありませんlocal

于 2013-01-22T11:58:07.783 に答える
1

実際、それは悪いアドバイスではありません。すべてのプログラミングディクタと同様に、暗黙の補遺は「自分が何をしているのかを本当に理解していない限り」です。の正当な使用例がありますlocal。ただし、一般的にlocal、適切なツールであると思われる場合は、先に進む前に再検討する必要があります。

于 2013-01-22T18:18:44.297 に答える