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!