Kullanıcı girişini alan ve ileriki bir tarihte çalıştırılacak başka bir komut dosyası oluşturan bir Perl betiğim var. Şu anda bu komut dosyaları için testler yazıyor ve yazıyor ve gerçekleştirmek istediğim testlerden biri, oluşturulan komut dosyasının başarıyla oluşturulup oluşturulmadığını kontrol etmektir (örn. perl -c <script>
.) Perl'in bir derleme yapabilmesinin bir yolu var mı? başka bir Perl işlemine sahip olmak zorunda kalmadan oluşturulan komut dosyası? Cevap aramayı denedim, ancak aramalar sadece Perl betiklerini çalıştırılabilir programlara derleme hakkında bilgi veriyor.Çalışan bir Perl oturumunda Perl betiğini nasıl derleyebilirim?
cevap
, dinamik olarak oluşturulan kodu yürütmek eval
işlevini kullanmak için: sadece derlemek veya sözdizimi kontrol etmek istiyorsanız
my $script = join /\n/, <main::DATA>;
eval($script); # 3
__DATA__
my $a = 1;
my $b = 2;
print $a+$b, "\n";
Ancak o zaman aynı Perl oturum içinde bunu yapmak mümkün olmayacaktır. kütüphaneden Test::Strict den
Fonksiyon syntax_ok
harici perl tercüman ile perl -c
çalıştırarak bir sözdizimi kontrolü çalıştırmak, bu yüzden hiçbir içsel yolu yoktur varsayalım. işinize yarayabileceğini
Sadece iş çevresinde olacaktır:
Bu durumdamy $script = join /\n/, <main::DATA>;
eval('return;' . $script);
warn [email protected] if [email protected]; # syntax error at (eval 1) line 3, near "1
# my "
__DATA__
my $a = 1
my $b = 2;
print $a+$b, "\n";
, sen derleme hata (lar) [email protected]
kullanarak kontrol etmek mümkün olacak ancak çünkü kodunun ilk satırı return;
, çalıştırılamaz.
Not: yararlı sohbet ve kod düzeltme kullanıcıya mob teşekkürler.
Bu, yalnızca derlemek değil, kodu derler ve yürütür. – mob
'exit''i değerlendirmek, çağıran programdan çıkacaktır. Belki de 'return' işlevini kullanın veya '(0) {...} ' – mob
' perl -e' eval ("exit 1;/daha geçerli code /;") kodunu yazdırın; "hey ben haklıymışım!" '|| echo 'Ah bekle, sanırım mob haklıydı.' – mob
Komut dosyası oluşturmak birçok yan etkiye sahiptir. Sub olarak tanımlanır. Modüllerin yürütülmesi ile sonuçlanır. Eğer bir şey derlediğini test etmek isterseniz, 'u ayrı bir tercüman isteyebilirsiniz. Bir betiğin test edilmesinin, daha sonraki testlerin yanlış pozitif veya yanlış negatifler vermesine yol açmayacağından emin olmanın tek yolu budur.
Son nokta cümlesini netleştirmek için eklendi. Borulama yerine – ikegami
Bu çalışma sizin gibi bir şey olmayacak mı?
open(FILE,"perl -c generated_script.pl 2>&1 |");
@output=<FILE>;
if(join('',@output)=~/syntax OK/)
{
printf("No Problem\n");
}
close(FILE);
, backtick kullanmak için herhangi bir sebep var mı? –
Seni seviyorum! Çok teşekkür ederim. Bu özel çözüm, özel durumumda gerçekten yardımcı oldu! – gideon
Test::Compile
modülü, özellikle pl_file_ok()
fonksiyonu.
- 1. PHP'den Perl betiğini nasıl arayabilirim?
- 2. Win görev sceduler'da perl betiğini başlatın
- 3. Perl: Perl bir karma değer
- 4. Perl
- 5. Perl, referanslar aşağıdaki Perl kodu
- 6. Perl: Windows
- 7. Perl ile parametrelerle arama işlevleri Perl ile
- 8. Perl Hash
- 9. Perl xml
- 10. Bir hash (Perl)
- 11. Perl DBI
- 12. Perl haritası -
- 13. Perl Mechanize
- 14. Başh içinde Perl listelerine iyi bir eşdeğer nedir? perl birinde
- 15. Perl'den bir PHP betiğini nasıl çağırırım?
- 16. Makefile'den bir Perl bir astarı nasıl çalıştırırım?
- 17. Perl kitaplıklarını PHP'den nasıl kullanabilirim?
- 18. Perl web uygulamasını nasıl profillerim?
- 19. Perl konuları: Nasıl yapımcı olunur?
- 20. Perl kaynak kodu nasıl belirlenir?
- 21. Perl kodunda yöntemleri nasıl belgeleyebilirim?
- 22. Perl Kuyruklar ve
- 23. Perl modülü Zaman alay Nasıl ::
- 24. Perl: sürece olmadığından Fieldb bir
- 25. Perl için bir kuyruklama sistemi
- 26. Perl: Açıksa, bir dosya silme
- 27. perl kapanışı ve $ _
- 28. Perl bir dosyanın ikili olduğunu nasıl biliyor?
- 29. Perl kullanarak bir dosyayı nasıl indirebilirim?
- 30. Öğeleri bir Perl dizisinden rasgele nasıl alabilirim?
Tam olarak "derleme" ile ne demek istiyorsunuz? Hataları kontrol et Yoksa yürütmek mi? –
@ user1215106 Hataları kontrol edin, aslında çalıştırmayın. Komut dosyasının daha sonra çalıştırıldığında sözdizimi hataları nedeniyle başarısız olmayacağından emin olmak istiyorum. – Joel
Kodu komut dosyanızda dinamik olarak oluşturuyor musunuz? –