2016-10-20 26 views
6

Çok basit bir soru için özür dilerim, ancak başlangıç ​​seviyesinde Perl'im ve bu soru için SO (veya başka bir yerde!) Hakkında uygun bir açıklama bulamadı. Anladığım kadarıyla birkaç örnek yazabilirim ve bunu çözmeye çalışıyorum ama uzmanlardan bazı bilgileri gerçekten kullanabilirim.Kullanım bildirimi ile qw (: const) kullanımı

Ben geliştirici kullanarak kütüphaneler kaynaktan elde ettiği bazı kod üzerinden gidiyorum:

use libExample qw(:const) 

Şimdi bu libExample gelen sabitleri kaynak demektir ama gerçekten bu nasıl çalıştığını bilmek istiyorum anladığım kadarıyla.

  1. Neden sadece diyemeyiz: use libExample qw(const)

  2. söz bu kütüphaneyi kullanan diğer geliştiricilerin yapmak biz/libExample.pm kendisinde yazmalısınız bir şey var mı (: alaka anlamak için çalışılıyor) Bu tür seçenekleri const yerine.

Teşekkürler!

+0

deneyin

package Foo; use Exporter; our %EXPORT_TAGS = ( working_days => [ qw(monday tuesday wednesday thursday friday) ], weekend_days => [ qw(saturday sunday) ] ); # ... 

Sonra bir etiketin yerine beş fonksiyon adları ile kullanabilirsiniz http://perldoc.perl.org/Exporter.html – rubikonx9

+0

@ rubikonx9: Bunu daha ayrıntılı olarak açıklamalı ve bir cevaba koymalısınız. –

cevap

6
use libExample qw(:const) 

$EXPORT_TAGS{const} anonim dizideki tüm isimler bulacaktır ve yürürlükte olan isim aktaracaktır.

use libExample qw(const) 

Oysa const almak ve mevcut ad bunu ithal edecek.

da diğer değişken vardır:

[!]name   This name only 
[!]:DEFAULT  All names in @EXPORT 
[!]:tag   All names in $EXPORT_TAGS{tag} anonymous array 
[!]/pattern/ All names in @EXPORT and @EXPORT_OK which match 

konu hakkında daha ayrıntılı bilgi için Exporter belgelerine gerçekleştirin.

+0

simbabque, herkesin okuması gerektiğini önerdiğim bir örneği ayrıntılı olarak ele aldı, ancak bunu daha kesin ve cevabını açıkladığımdan, bunu, şüphelerimi hemen temizleyen bir nokta olarak kabul ettim. –

8

Sözdizimi use Foo qw(:const), Exporter'da EXPORT_TAGS özelliğini kullanıyor.

Kitaplık modülünüzü ayarladığınızda genellikle bir grup işlev veya sınıf değişkeniniz olur. Daha sonra, İhracatçı'yı varsayılan olarak

veya bunların ne zaman isteneceğini bildirerek yapılandırırsınız.

OUR @EXPORT_OK = qw(frobnicate barnicate); 

sub barnicate { ... } 

Ama aynı zamanda birlikte grup şeyler söylemek, böylece kitaplığınızın kullanıcı tüm yöntemleri listelemek için gerek yoktur. Bu örneği düşünün. Bütün iş günü isteseydi

package Foo; 
use Exporter; 

our @EXPORT_OK qw(monday tuesday wednesday thursday friday saturday sunday); 

sub monday { ... } 
sub tuesday { ... } 
sub wednesday { ... } 
sub thursday { ... } 
sub friday { ... } 
sub saturday { ... } 
sub sunday { ... } 

Şimdi, bunu yapmak zorundayız: bir uzun çizgi var

use Foo qw(monday tuesday wednesday thursday friday); 

. Bunun yerine, eğer bunlar gruplanabilirse çok yararlı olur. Eh, olabilirler.Bunun yerine kütüphanede Bunu yaparsanız: Bu denk olduğunu

use Foo qw(:working_days); 

Not:

use Foo ':working_days';