Perl での :: の意味はどこにもありません。例:
$someVariable::QUERY{'someString'};
ありがとう!
Perlmodでカバーされています。
は::
実際には名前空間識別子です。この名前空間のアイデアが定着する前の初期の Perl では、プログラム内で変数名の衝突が発生する可能性がありました。
これが私のプログラムです:
#! /usr/bin/env perl
#use strict;
use warnings;
use feature qw(say);
require "test2.pl";
$foo = "bar";
futz_with_foo();
say $foo;
私はバーに設定$foo
し、それに触れたことはありません。印刷する必要がありますただし、プログラムを実行すると、次のようになります。bar
$ ./test.pl
WOO WOO! I MESSED WITH FOO!
でtest2.pl
、私は持っています:
sub futz_with_foo {
$foo = "WOO WOO! I MESSED WITH FOO!"
}
1;
何が起こったのかというと、両方のプログラムが同じ variable を使用しているということです$foo
。この問題を回避するために、Perl はモジュールに独自の名前空間を持つ機能を提供します。元の構文は一重引用符でしたが、Perl 4 で変更され::
ました (私の記憶が正しければ)。一重引用符は引き続き使用できます。packageで名前空間を宣言します。
これを理解する最善の方法は、実際に見てみることです。次のことを試してください。
#! /usr/bin/env perl
use strict;
use warnings;
use feature qw(say);
our $foo = 'This is the value of $foo';
say '$foo: ' . $foo;
say '$main::foo: ' . $main::foo;
say "\$main'foo: " . $main'foo;;
say "\nSwitching to package Bar";
package Bar;
our $foo = 'This is in package Bar';
say '$foo: ' . $foo;
say '$Bar::foo: ' . $Bar::foo;
say "\nSwitching to package main again";
package main;
say '$foo: ' . $foo;
これを実行すると、次のようになります。
$foo: This is the value of $foo
$main::foo: This is the value of $foo
$main'foo: This is the value of $foo
Switching to package Bar
$foo: This is in package Bar
$Bar::foo: This is in package Bar
Switching to package main again
$foo: This is in package Bar
デフォルトでは、プログラムはメインの名前空間で開始されます。ところで、私はour $foo
and notを宣言したことに気付くでしょうmy $foo
。これは、パッケージ変数が格納されour
ている Perl シンボル テーブルに変数を配置するためです。これはレキシカル スコープの宣言であり、現在は推奨されています。で宣言された変数は、宣言されたスコープ内にのみ存在し、ファイルの外にあることはできません。my
my
たぶん、これは変数を宣言するのを忘れたときに表示されるエラーメッセージに光を当てるでしょうmy
:
Global symbol "$foo" requires explicit package name at ...
デフォルトでは、すべての Perl 変数はパッケージ変数です (つまり、Perl のシンボル テーブルにあります)。use strict
プラグマは、パッケージ変数を宣言するか、our
変数の完全なパッケージ名を使用することを強制します。my
(99 40/100% の確率で) で変数を宣言し、 を使用するstrict
ことで、Perl を使用するときに変数を宣言する必要があります。
お役に立てれば。
それ自体は何もありません。SomePackage::SomeHash
全体として識別子です。$someVariable::QUERY{'someString'}
hash のハッシュ要素someString
を参照し%someVariable::QUERY
ます。Hashは、パッケージ内%someVariable::QUERY
のハッシュの完全な名前です。%QUERY
someVariable