1. ホーム
  2. perl

[解決済み】Perlの'my'と'our'の違いは何ですか?

2022-04-17 18:04:06

質問

私は知っている my はPerlの場合です。これは、定義されたブロックのスコープにのみ存在する変数を定義するものです。では our はどうでしょうか?

どのように our とは異なり my ?

解決方法は?

どのように our とは異なります。 my とは何ですか? our を行うか?

まとめると

Perl 5 から利用可能。 my は、パッケージ以外の変数を宣言する方法である、ということです。

  • プライベート
  • 新規
  • 非グローバル
  • をどのパッケージからも分離することで、変数 はできません。 という形でアクセスされます。 $package_name::variable .


その一方で our 変数はパッケージ変数であるため、自動的に

  • グローバル 変数
  • 間違いなく 非公開
  • 必ずしも新しいとは限らない
  • 可能 を使えば、パッケージの外(あるいはレキシカルスコープ)でもアクセスできます。 のように、修飾された名前空間を使用します。 $package_name::variable .


で変数を宣言します。 our で使用するために、変数を事前に宣言することができます。 use strict タイプミスの警告やコンパイル時のエラーは発生しません。Perl 5.6 以降では、旧式の use vars のようにレキシカルにスコープされるのではなく、ファイルにスコープされるだけでした。 our .

例えば、変数の正式な修飾名である $x 内部 package main$main::x . を宣言する our $x を使えば、素の $x を使用する場合、宣言のスコープではペナルティを受けることなく (すなわち、結果としてエラーが発生することなく) 変数を使用できます。 use strict または use strict "vars" . スコープは1つ、または2つ、またはそれ以上のパッケージ、または1つの小さなブロックかもしれません。