dirname($0)
Chankey Pathak ve Matthias göstermek gibi tam yolunu dönmez: ancak scrip.pl yolunda bulunursa hiçbir fark yoktur.
Başka yollar olduğunu eklemek isterim. Örneğin,
use FindBin qw($RealBin);
BEGIN: {
my ($scriptDir) = $RealBin;
chdir $scriptDir or die "Can't change to $scriptDir: $!";
};
$RealBin
çözüldükten bağlantıları ile tam yolu olması dışında, sen ne gösterecek aynı verir
FindBin (aynı zamanda çekirdek) kullanabilir.
chdir, yorum için ikegami sayesinde başarısız olabilir. Bu durumda yanlış iade edilir ve yukarıdaki kodlar uygun şekilde ayarlanır. Sorgulanan üçüncü satırın bununla hiçbir ilgisi olmadığını unutmayın.
Bu modül aynı zamanda yaygın olarak belki de her ikisi için kullanmak daha kolay bir karar için kılan örnek
use lib "$RealBin/../lib";
için, lib pragma ile kütüphanelere göreli yolu için kullanılır. Bu fonksiyon, UNIX kabuk komut dirname(1)
ile uyumluluk için sağlanır ve daha kültürlerinden bazı miras kalan
( maden olmayan vurgu ) File::Basename den dirname
açıklamada verilen
Daha.Adına rağmen NOT her zaman dizin adını beklediğiniz gibi döndürür. Güvende olmak için, bir yolun dizin adını kullanmak istiyorsanız fileparse()
'u kullanın.
Doğrusu bile abs_path
tam yolunu sağlamayabilir kendi başına __FILE__
beri kullanılmaktadır
use Cwd qw(abs_path);
BEGIN: {
my ($scriptDir) = abs_path(__FILE__) =~ m|(.*)/|;
chdir $scriptDir
or die "Can't change to $scriptDir: $!";
};
ile gider. Regex açgözlülükle her şeyi en son /
'a, yani betiğin dizinine giden tam yola kadar atar.
Aşağıda gösterildiği gibi, 'FindBin qw ($ RealBin);' kullanın ve dizini değiştirmeyin. '@ ARGV' içinde listelenen dosyalar' $ RealBin' değil 'pwd'ye göredir. – shawnhcorey