2012-02-14 20 views
10

module-starter'u (--builder=Module::Build ile) başlattım. SQL'i bir .ini dosyasına toplamak için SQL::Library'u kullanmak istiyorum ... ancak dosyayı çalışma süresi içinde bulmak için, tam yolunu bilmem gerekiyor. Çalışma zamanında bir modülün "veri dizini" yolunu nasıl alabilirim?Veri dosyalarını Perl modülleriyle nasıl dağıtmalıyım?

Şimdiye kadar, FindBin'i kullanıyorum ("$FindBin::Bin/../../path/to/module/datafiles/foo.ini" gibi, ama bu çok sağlam değil (örneğin, PATH'daki iki farklı dilde aynı ada sahip iki program olduğunda kesiliyor gibi görünüyor).

cevap

16

File::ShareDir ürününün anlamı şudur: Module :: Build kullandığınız için, veri dosyalarınızı birlikte yüklemeniz için share_dir parametresini (ve modül :: Build 0.36 gerektirir) ayarlamanız gerekir. Daha sonra, kodunuzda, foo.ini yolunu hesaplamak için File :: ShareDir kullanacaksınız (örn. dist_file('My-Dist', 'foo.ini'))

+0

Modül n olduğunda dosyaları bulmak için File :: ShareDir 'dosyasını alabilir miyim bin/veya test dosyalarındaki komut dosyalarından henüz yüklü değil misiniz? – user1481

+0

@ user1481, Bu testler çalıştırıldığında, modül kurulduktan ('' blib/''' 'deki' Build testi' komut dosyasını çalıştırarak dosyayı bulur. – ikegami

+1

@ user1481, Diğer komut dosyaları için, ya make.PL && ./Build && perl -Mblib script.pl işlevlerini kullanın ya da "$ FindBin :: Bin /../ share/foo.ini" dosyasına geri dönüş kodu ekleyin 'File :: ShareDir tarafından döndürülen dosya mevcut değil. – ikegami

İlgili konular