2013-05-09 22 views
12

Yani bir main.pl betiğine sahip olduğumu ve bu komut dosyasında bazı değişkenleri (her çeşit değişken sabit veya normal) bildirmem gerektiğini ve bu değişkenlerin main.pl komut dosyasından içereceğimiz tüm komut dosyaları ve modüller aracılığıyla erişilebilir olması gerekiyor otomatik olarak. Ben main.pl bir değişken $myVar varsa ve main.pl I script1.pl, script2.pl veya script3.pm ve ben bu belirli komut dosyası veya modülünde tanımlanmış herhangi Var erişmek gibi $myVar erişmesi gereken bu komut kimseden gerektiriyorsa Yani ne Perl - Dahil olan tüm komut dosyalarında ve modüllerde global değişkenler mevcut mu?

.

Ağda arama yaptım, ancak yalnızca eklediğiniz komut dosyalarından değişkenlere erişebileceğiniz veya modüllerdeki değişkenleri ayıklayabileceğiniz örnekler buldum; ama istediğim bu değil.

PHP'de, üst komut dosyasından değişken kullanmak için global $var1, $var2 vb. Kullanabileceğiniz bir anahtar kelime yok mu?

Örnekler, belgeler veya makaleler kabul edilebilir - temel olarak bana yardımcı olabilecek her şey yardımcı olabilir.

cevap

29

:

our $var = 42; 

Her genel değişkenin, herhangi bir yerden erişmek için kullanılabilecek tam nitelikli bir adı vardır. Tam ad paket adı artı değişken adıdır. Bu noktada henüz bir paket açıklamamışsanız, bir :: ürününe kısaltılabilen main paketinde bulunuyorsunuz. Bu nedenle yukarıdaki değişkenin adı

Başka bir paket kullanmış olsaydık, önek, örn.

package Foo; 
our $bar = "baz"; 
# $Foo::bar from anywhere, 
# or even $::Foo::bar or $main::Foo::bar 

Bir önek olmadan bir değişken kullanmak istiyorsak, ancak diğer paketler altında dışa aktarmak zorundayız. Bu genellikle Exporter alt sınıfı ile yapılır, bkz. @Davids yanıtı. Ancak, bu yalnızca diğer yoldan değil use d olan paketlerden değişkenler sağlayabilir. Örneğin.

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: (my ile beyan edilen)

#!/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 

Sözcük değişkenler genel benzersiz adlara sahip değildir ve bunların statik kapsamı dışında erişilemez. Ayrıca Exporter ile kullanılamaz.

+0

Bazı düşüncelerden sonra bu yönteme geçiş yaptığım için teşekkürler: D –

+0

$ :: hile yapacak – yanger

5

Bunu yapmanın en kolay yolu, kendi modülünüzü oluşturmak olacaktır. Yani, örneğin, ben değişkenler $foo and $bar küresel erişmek istiyorsanız, o zaman ben, bir modül oluşturabilir şöyle:

:

# file: MyVars.pm 
package MyVars; 

$foo = 12; 
$bar = 117.8; 

1; 

Sonra MyVars modülünü kullanan herhangi Perl kullanarak bu değişkenleri erişebilir

# file: printvars.pl 
use MyVars; 

print "foo = $MyVars::foo\nbar = $MyVars::bar\n"; 

Çıktı: Sen our anahtar kelime ile küresel değişkenleri ilan edebilir

foo = 12 
bar = 117.8 
+0

Not: 'EXPORT_OK', istek üzerine dışa aktarılacak sembolleri tanımlar; Hiçbiri istemiyorsun. Tam nitelikli isimleri kullanarak, 'İhracatçı'ya bile ihtiyacınız yoktur: Örneğiniz, İhracatçı ile ilgili tüm hatlar ile çalışacaktır. – amon

+0

@amon Anladım. Teşekkürler. – David

İlgili konular