2011-03-25 14 views
10

Ben Stdin girişindeki O durmuyor komut satırı argümanları ve STDINKomut satırı argümanlarının yanı sıra Perl komut dosyası için STDIN'den de giriş yapın mı?

#!/usr/bin/perl -w 
use strict; 
use warnings; 

my $logpath = $ARGV[0]; 
print "logpath : $logpath\n"; 

print "Name : "; 
my $name = <>; 
chomp($name); 
print "my name is $name\n"; 

hem alan bir Perl komut dosyası var. Komut satırı veya standart girişlerden herhangi biri için iyi çalışıyor, ancak ikisi için değil.

Herhangi Bir Neden? @ARGV hiçbir öğesi vardır

+0

Üzgünüm efendim, ama sen ne istiyorsun? – orlp

cevap

18

Değişim

my $name = <>; 

için

my $name = <STDIN>; 

Eğer komut satırında olsa argümanları geçiyoruz beri, daha sonra elmas operatör STDIN uzak ama sizin durumda okuyacak, @ARGV olmaz boş ol. Bu nedenle, adı okumak için elmas operatörünü <> kullandığınızda, komut satırında adı belirtilen dosyanın ilk satırı okunur.

+0

Teşekkürler dude .... Çalıştı ... Neden bunun bir sorunu olduğunu bilmiyorum .... – naveenhegde

+5

Bu bir sorun çünkü <> @ARGV'deki dosyalardan okuyor. Bunun yerine stdin'den okumak istiyorsanız, o zaman @ARGV'nin boş olduğundan emin olmanız gerekir. Programınızı düzeltmenin alternatif bir yolu, <> kullanmaya devam etmektir, ancak şunu değiştirin: $ logpath = shift; Böylece @ARGV boş olacaktır. – tadmc

+0

Vardiya kullanma benim için çalıştı, <> değişmedi – Colin