2013-10-18 16 views
8

Bu soru, benim açımdan tembellik dışarı gerek duyulmuştu:Stdin'i, tek parametre olarak girdiyi arayan bir perl betiğine nasıl basılır? Ben basit yapıda yürütülen komut onlarca çünkü

perl my_script.pl my_input_file 

... ve çıkış bekletilmektedir edilir. Ancak şimdi, bu senaryolara giriş yapmak istediğim belirli bir durumun olduğunun farkındayım. Yani, böyle bir şey:

perl my_script.pl my_input_file | perl my_next_script.pl | perl third_script.pl > output 

kimse benim komut dosyaları her kullanıcı tanımlı giriş dosyasının stdin'nin yerine kabul etmek Recoding olmadan bunu yapmanın bir yolu biliyor mu

? Komut dosyalarım dosya adına şu şekilde bir açıklama yapar:

open(INPUT,$ARGV[0]) || die("Can't open the input file"); 

Önerileriniz için teşekkürler! dosya

perl my_script.pl my_input_file | perl my_next_script.pl - | perl third_script.pl - > output 

cevap

12

kullanımı - basit çözüm sunmaktadır. Elmas operatörünü tavsiye etmek istiyorum: <>. Eğer argüman dosya adları kullanmak eğer

open my $fh, "<", $ARGV[0] or die $!; 
while (<$fh>) { 
    ... 

O kodun bir kısmını değiştirmek için elmas operatörünü kullanabilirsiniz yapacağını bir komut dosyası olarak

while (<>) { 
    ... 

dosya tanıtıcısı adı ARGV olacak veya değilse STDIN. Dosya adı $ARGV'da bulunur.

Bu işleç, Perl'in dosya adı argümanlarından veya standart girişten girdi aradığı bir davranışı çağırır. Eğer

inputpipe | script.pl 

veya

script.pl inputfile.txt 

yapmak ister elmas operatörü gayet girdi alacak demektir

.

Not: Sizin open bildiriminiz tehlikelidir. Açık mod ile açık üç argüman ve sözcüksel dosya tanıtıcı kullanmalısınız. Ona bağlı die bildirimi, açmanın neden başarısız olduğu hakkında bilgi vermek için $! hata değişkenini içermelidir.

İlgili konular