2015-07-29 12 views

cevap

13

CPAN üzerindeki Perl::Critic modülünde, Perl Best Practices'ın önerdiği herhangi bir ihlal tespitini amaçlayan perlcritic adlı bir yardımcı program vardır. Ancak, sadece PBP ile sınırlı değildir ve CPAN'da ek kurallar sağlamak için Perl :: Critic'e bağlanan birçok politika modülü vardır. Perl :: Critic'i yüklememeyi tercih ederseniz, kodunuzu perlcritic.com'a yapıştırabilir ve standart Perl Critic seviyelerinden herhangi biriyle geri bildirim alabilirsiniz, acımasız şekilde nazik davranabilirsiniz.

package Foo; 
use strict; 
use warnings; 

sub new { 
    bless {}, shift; 
} 

sub bar { 
    print "Hello\n"; 
} 

package main; 
use strict; 
use warnings; 

my $f = Foo->new; 
my $method = 'bar'; 

$f->$method(); 

Ben perlcritic myexample.pl --brutal çalıştırmak

, ben yöntemi çağrılırken kullanılan araçlarla ilgili herhangi bir şikayet alamadım:

aşağıdaki senaryoyu düşünün.

Perl Best Practices numaralı telefonu okudum ve şimdi sembolik yöntem çağrılarını belirtmek için tekrar arama yaptım ve hiçbir şey bulamadım. Bu, böyle yapılardan bahsetmeyi özlemediğimi söylemek değil, ama onları bulamıyorum. Ve Perl :: Critic'in PBP'yi destekleyen yerleşik politikaları da aynı fikirde.

Damian Conway adlı kitabında, Object Oriented Perl numaralı kitabın örnekleri vardır. Elbette Damian OOP'tan yıllar sonra PBP yazdı ve her ikisi de şimdiye kadar yeterince yaşlıydı ki, birçok durumda daha iyi uygulamalar ortaya çıktı.

Ancak, en güvenilir kodlama biçimlerinin ne olabileceğini düşünmek hala harika. Ve eğer $object->$method() yapısının sürdürülmesinin zor olabileceğinden endişeleniyorsanız, bunu yapmamanız için büyük bir nedeniniz olmadıkça her zaman önleyebilirsiniz. Ve bu durumlarda, kullanımı iyi belgelenmiş kodun en dar bölümlerine ayırın. Belki de daha temiz bir uygulama, bir sembol yerine bir yönteme başvurmaktır. çağırma

my $method = $f->can('bar'); 
$f->$method(); 

vasıta aynı görünüyor, ama $ yöntem muhtemelen hatalar daha az eğilimli bir kod başvuru içeriyor: Yani can ile yapılabilir. Bir şey için, can, gerçek yöntem çağrısı sırasında atılan bir istisna yerine, bar yoksa çağrıldığı anda bir istisna atar. Bu, programlamaya karşı daha savunmacı bir yaklaşımdır. Ve my $method = \&Foo::bar'da olduğu gibi can'un yalnızca bir referansa başvurmak yerine kullanılması, sabit referansın göstermediği kalıtımla güzel oynama yararına sahiptir.

+4

Harika yazma. – nslntmnx

İlgili konular