:
our $var = 42;
各グローバル変数には完全修飾名があり、どこからでもアクセスできます。完全な名前はパッケージ名と変数名です。その時点でパッケージを宣言していない場合は、パッケージmain
になります。これは先頭の::
に短縮することができます。したがって、上記の変数は、名前
$var # inside package main
$main::var # This is most obvious
$::var # This may be a good compromise
我々は別のパッケージを使用していた場合は、接頭辞は、例えば、変化するであろうがあります
package Foo;
our $bar = "baz";
# $Foo::bar from anywhere,
# or even $::Foo::bar or $main::Foo::bar
プレフィックスのない変数を他のパッケージで使用する場合は、エクスポートする必要があります。これは通常Exporter
のサブクラス化によって行われます。@Davids answerを参照してください。しかし、これは、use
dであるパッケージからの変数のみを提供することができます。例えば。
Foo.pm
:
package Foo;
use strict; use warnings;
use parent 'Exporter'; # imports and subclasses Exporter
our $var = 42;
our $not_exported = "don't look at me";
our @EXPORT = qw($var); # put stuff here you want to export
# put vars into @EXPORT_OK that will be exported on request
1;
script.pl
:
#!/usr/bin/perl
# this is implicitly package main
use Foo; # imports $var
print "var = $var\n"; # access the variable without prefix
print "$Foo::not_exported\n"; # access non-exported var with full name
(my
で宣言された)レキシカル変数は、グローバルにユニークな名前を持っていないし、彼らの静的範囲外でアクセスすることはできません。また、Exporter
では使用できません。
いくつかの考えの後、私はこのメソッドに感謝しました:D –
$ ::はトリックを行います –
yanger