Perl'de, bir alt dizini nasıl oluşturabilirim ve aynı anda yoksa, üst dizinleri nasıl oluşturabilirim? UNIX'in mkdir -p komutu gibi mi? Dosya :: Yol modülündenTek Perl komutunda dizin ve üst dizinleri nasıl oluştururum?
cevap
use File::Path qw(make_path);
make_path("path/to/sub/directory");
kaldırılmış mkpath ve tercih edilen make_path 5 Taşıyıcı o here arşivlendiğinde iplik Perl bir tartışma kaynaklandı. Özetle, Perl 5.10 testi makepath() arabiriminin argüman ayrışmasında beceriksizliğe yol açmıştır. Özetle; Bu nedenle, işlevin seçeneklerini ayarlamak için son argüman olarak bir karma alan daha basit bir sürümle değiştirildi.
@skiphoppy: Bu, soruda belirtildiği gibi "UNIX'in mkdir -p komutu gibi" değil. mkdir'in man sayfası -p, --parents no error if existing, make parent directories as needed
gösterir. Ancak dizin varsa make_path false değerini döndürür. (yani, make_path "/ tmp/foo" veya ölün; #will/tmp/foo varsa ölün) –
Randall
Kullanım mkpath:
use File::Path qw(mkpath);
mkpath("path/to/sub/directory");
Bunu şimdi araştırıyorum, mkpath() öğesinin kullanımdan kaldırıldığını ve resmi arabirimin artık make_path() olduğunu görüyorum. Birisi bize ne satın aldığına dair büyük bir açıklama yazarsa, kabul edilen cevabı yapacağım. – skiphoppy
ref http://perldoc.perl.org/File/Path.html
"onlar var eğer make_path fonksiyonu verilen dizinleri oluşturur [sic!] Önce, çok Unix komutu mkdir -p
gibi" Bir Perl arıyorsanız
Lütfen görmezden 'mkdir -p' işlevselliği ancak aşağıdaki kodla modülü çalışacaktır:
my $dir = '/root/example/dir';
system ("mkdir -p $dir 2> /dev/null") == 0
or die "failed to create $dir. exiting...\n";
bir modülünü kullanabilirsiniz ancak o zaman size portuna kodunuzu olacak her sunucuya yüklemeniz gerekir. Genellikle mkdir gibi bir iş için sistem işlevini kullanmayı tercih ederim, çünkü bir dizini oluşturmak için yalnızca bir kez ihtiyacım olduğunda bir modülü almak ve çağırmak için daha az masraf.
Bu yaklaşım, modül takmayı önlemek istiyorsanız mantıklıdır. Genellikle ihtiyaç duyduğum modüllerin kurulumunu tercih ederim ya da sistemi desteklemeyi reddediyorum. :) Modülleri kullanmayı tercih ediyorum, böylece onlara giren test ve araştırmanın faydalarından yararlanabiliyorum, böylece sistem çağrılarını kontrol etmemek veya hata mesajlarının çıktısını kaybetmemek gibi hataları önleyebilirim, bir süreç yaratmak. – skiphoppy
Bu, işletim sistemine bağımlılık oluşturmuyor mu? –
Bu soruyu ekledim, böylece her seferinde aramak yerine gelecekte kolayca tekrar bulabileceğim. Bunu her zaman POSIX.pm'de, bir sebepten dolayı ararım. – skiphoppy