Perl’in system()
Fonksiyonu ile Çalıştırılan Komutları Yazdırma Nasıl Yapılır
Perl ile çalışırken, sistem komutlarını system()
fonksiyonu veya ters tırnaklar (backticks) kullanarak çalıştırmak mümkündür. Bu, komutları çalıştırmanıza olanak tanır; ancak genellikle bu komutları görünmez hale getirir, bu da geliştirme veya hata ayıklama sırasında can sıkıcı olabilir. Eğer script’inizde çalıştırılan komutları görmek istiyorsanız—Windows toplu iş dosyasında @echo on
komutu ile olduğu gibi—doğru yerdesiniz! Bunu nasıl başaracağınıza birlikte bakalım.
Problem
Perl’in system()
fonksiyonu sistem komutlarını çalıştırmaya olanak tanır ama varsayılan olarak yürütülen komutu yazdırmaz. Bu, çıktıyı temiz tutmak istediğiniz üretim scriptleri için kullanışlı olabilir. Ancak, hata ayıklama veya daha derin bir anlayış için, bu komutları gerçek zamanlı olarak görmek son derece faydalı olur.
Çözüm
Bu sorunu çözmek için, system()
fonksiyonunun etrafında basit bir sarmalayıcı (wrapper) oluşturabiliriz; bu sarmalayıcı komut çalıştırılmadan önce komutu yazdıracaktır. Bu sayede Perl script’inizde hangi komutların işlendiğini neden göreceksiniz. İşte bunu nasıl uygulayabileceğinize dair adımlar:
Adım 1: system()
Anlamak
system()
fonksiyonu bir komutu çalıştırabilir ve çıkış durumunu döndürebilir, ancak komutun kendisini yazdırmaz. İşte basit bir örnek:
$ls = system("ls");
print "Sonuç: $ls\n"; # Bu 'ls' komutunu göstermez
Çıktıda yalnızca sonuç gösterilecek, çalıştırılan komut değil.
Adım 2: Komutları Yazdıran Bir Sarmalayıcı Fonksiyon
Komutu ve çıktısını yazdırmak için, bir argüman olarak bir komut alan ve bunu terminale yazdırdıktan sonra komutu çalıştıran bir alt prosedür (subroutine) oluşturabiliriz. Bunu nasıl yapabileceğiniz:
sub execute {
my $cmd = shift; # Komutu al
print "$cmd\n"; # Çalıştırılan komutu yazdır
system($cmd); # Komutu çalıştır
}
my $cmd = $ARGV[0]; # Komutu komut satırı argümanından al
execute($cmd); # Komutu ile fonksiyonu çağır
Adım 3: Kullanım Örneği
Bu fonksiyonu kullanmak için, istediğiniz komutu bir argüman olarak geçirerek komut satırından Perl script’inizi çağırmalısınız. Örneğin:
perl your_script.pl "ls" # "your_script.pl" yazdığı yerle script adınızı değiştirin
Bunu çalıştırdığınızda, ls
komutunun çalıştırılmadan önce terminale yazdırıldığını göreceksiniz; bu da sizlere gerekli görünürlüğü sağlayacaktır.
Özet
system()
fonksiyonunun etrafında basit bir sarmalayıcı oluşturarak çalıştırılan komutun yanı sıra çıktısını da yazdırabilirsiniz. Bu teknik hata ayıklama veya script’inizin ne yaptığını daha iyi anlamak için çok değerli olabilir. Hatırlayın:
system()
: Bir komutu çalıştırır fakat yazdırmaz.- Sarmalayıcı Fonksiyon: Komutu yürütmeden önce göstermek için yeni bir fonksiyon oluşturun.
Bu basit yaklaşım sayesinde, Perl script’lerinize şeffaflık ekleyebilir, izlemeyi ve hata ayıklamayı daha kolay hale getirebilirsiniz. İyi kodlamalar!