Zararlı alt yordam ve yöntem bağımsız değişkenleri dışına almak için genel amaçlı bir modül arıyorum. CPAN: Params::Validate
, Params::Smart
, Getargs::Mixed
, Getargs::Long
ve diğerleri arasından çeşitli olasılıklarla tarandım. Bu veya diğer modüllerin artıları ve eksileri ile ilgili her türlü bilgi takdir edilecektir. Teşekkürler.Perl modülleri altprogram argümanlarını doğrulamak için ne işe yarar?
cevap
'u kullanmaya başlarsanız, beğeninize MooseX::Types
bulacaksınız. Türler otomatik olarak bir is_ $ type() ve to_ $ type() var. Bunlar, geçiş tipi kısıtlamalarını girdiğinizden emin olmak için veya girişinizi tür için geçerli bir zorlamaya sahip olduğunuzdan emin olmak içindir. Bu tür şeyler için bile onları daha iyi seviyorum çünkü nesnenizin durumunun söz konusu türlere ek ücret ödemeden sahip olmasını sağlayabilirsiniz.
use Moose;
has 'foo' => (isa => MyType, is => ro);
sub _check_my_type {
my ($self, $type) = @_;
is_MyType($type);
};
Bu sizin Modern perl'de bu şeyler kullanıyorsanız muhtemelen "yanlış yapıyor." Konum derin/özyinelemeli türleri için bazı destek eksik, ama olabilir Bunun yerine, kendi tutarlılık kontrollerine sahip bir nesneyi kullanın (yukarıdaki gibi MyType ile benim gibi) ve sadece nesneyi geçirin.
Yalnızca argümanların onaylanmasından biraz daha fazlasını sağlayan MooseX::Method::Signatures'a bakın. POD gelen
Örnek:
package Foo;
use Moose;
use MooseX::Method::Signatures;
method morning (Str $name) {
$self->say("Good morning ${name}!");
}
method hello (Str :$who, Int :$age where { $_ > 0 }) {
$self->say("Hello ${who}, I am ${age} years old!");
}
method greet (Str $name, Bool :$excited = 0) {
if ($excited) {
$self->say("GREETINGS ${name}!");
}
else {
$self->say("Hi ${name}!");
}
}
MooseX::Method::Signatures Perl plakasına daha seksi sözdizimi getiren MooseX::Declare gibi standart. Yukarıda böylece (sadece kısalık için ilk yöntem gösteriliyor) gibi yazılabilir:
use MooseX::Declare;
class Foo {
method morning (Str $name) {
$self->say("Good morning ${name}!");
}
}
düz değişmezler bir sonucu, signatures CPAN modülünü de vardır ama maalesef yukarıdaki gibi özellik olarak zengin değildir. Moose şöhretin hiper üretken programcı - -
Şu anda Dave Rolsky fark
OP aynı soruyu araştırıyorum geçenlerde Parametreler :: Doğrulama bakımı devralan (2009) vardır, bu yüzden bu düşünüyorum iyi bir işaret. Modül, 2003'ten beri güncellenmemiştir. Bu yüzden, yine de, altprogram parametrelerini kontrol etmek için tekrar kullanılabilir.
Params :: Validate'ı seviyorum, ancak geçersiz paramları bir şekilde rapor etmekten ziyade komut dosyasının çalışmaya devam etmesini tercih etmek yerine ölmeyi tercih ediyor gibi görünüyor. ... – Marcus
- 1. Control.Category ne işe yarar?
- 2. Meta Programlama, ne işe yarar?
- 3. kAudioSessionProperty_InputSources aslında ne işe yarar?
- 4. Asp.Net AutoEventWireup - ne işe yarar
- 5. Haskell - Control.Applicative.Alternative ne işe yarar?
- 6. RegisterType() içindeki InjectionMembers ne işe yarar?
- 7. Etiket yorumları, pom.xml dosyasında ne işe yarar?
- 8. Ruby hash işlevini ne işe yarar?
- 9. $ wpdb - başarısız olduğunda ne işe yarar?
- 10. Z Shell "autoload" yerleşiği - ne işe yarar?
- 11. Bir Eclipse Spring STS "Config Set" ne işe yarar?
- 12. CDATA tam olarak nedir ve ne işe yarar?
- 13. @ simgesi eklendiğinde neden bu işe yarar?
- 14. dizgi ayırma: neden bu işe yarar?
- 15. Amaç-C/Kakao: Interface Builder/Nib için "Application" proxy nesnesi ne işe yarar?
- 16. WPF Değer eşit veya daha büyükse işe yarar olan tetikleyici
- 17. Bağımlılık özelliği yeniden entrancy (veya: neden bu işe yarar?)
- 18. Visual Studio'da "En iyileştirme kodu" onay kutusu. Bu tam olarak ne işe yarar?
- 19. data_for etiketi ne zaman kullanıma yarar 042
- 20. Eski Perl CPAN modülleri nasıl kurulur
- 21. Hangi Perl modülleri RESTful web API istemcisi yazmak için iyidir?
- 22. "SqlMethods" Yöntemleri Ne İşe Yarayor?
- 23. Oyun çerçevesi için arama modülleri 2
- 24. Perl komut satırı argümanlarını bir bash komut dosyasından alanlarla mı?
- 25. URLRegularExpression URL'yi doğrulamak için
- 26. meteor/react - "readOnly" özelliği ne işe yarıyor?
- 27. Lua modülleri için iyi bir depo nedir?
- 28. Konsol.log neden kullanılır? Bu ne işe yarıyor?
- 29. Bu işe atama ne yapar (* this = val)?
- 30. Bu Python betiği neden çok satırlı dizeden önce \ var ve ne işe yarar? Ben dize bakıyorum Python komut olarak
Eğer kullanabiliyorsanız Moose kötü bir öneri değildir. Yapamazsan, Fare Moose-light. Bu, Moose'un tüm bağımlılıkları olmadan ve aynı derleme zamanı isabeti ile size tür kontrolü ve birkaç şey daha kazandıracaktır. Açık olmak gerekirse, <3 Moose, ancak CGI'lar için ve böyle bir şey her zaman en iyi seçim değildir. – mikegrb
Fare aktif olarak geliştirilmiyor. Ölü bir projedir (Mouse.pm'nin Doc'suna göre Mouse yerine Moose kullanın.). Ne yazık ki, Mouse docs bile CGI için bunu önermiyor! Bunun yerine, "Yıllar içinde önemli ilerlemeler kaydedilmiş olsa da, derleme zamanı cezası, bazı çok özel uygulamalar için bir başlatıcı değildir. Eğer başlangıç zamanının gerekli olduğu bir komut satırı uygulaması veya CGI komut dosyası yazıyorsanız, Moose kullanamazsınız. Bunun yerine, mümkünse HTTP :: Engine ve FastCGI kullanmanızı öneririz. " http://rt.cpan.org/Public/Bug/Display.html?id=42203 –