2011-03-25 157 views
10

我有一個Perl腳本,它在標準輸入輸入既需要命令行參數和標準輸入傳遞命令行參數以及從STDIN輸入Perl腳本?

#!/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"; 

它不會停止。 對於命令行或標準輸入中的任何一個都適用,但不適用於這兩者。

有什麼理由?

+0

對不起,先生,但你想要什麼? – orlp 2011-03-25 10:11:37

回答

18

變化

my $name = <>; 

my $name = <STDIN>; 

如果@ARGV沒有任何元素,那麼鑽石經營者會從STDIN但在你的情況,因爲你逝去雖然命令行參數讀取,@ARGV不會空着。因此,當您使用菱形運算符<>來讀取名稱時,將讀取名稱在命令行中指定的文件的第一行。

+0

Thanks dude ....它工作...我不知道爲什麼這有一個問題.... – naveenhegde 2011-03-25 10:18:01

+5

這是一個問題,因爲<>從@ARGV中的文件讀取。如果你希望它從stdin中讀取,那麼你需要確保@ARGV是空的。修復程序的另一種方法是繼續使用<>,但更改爲:my $ logpath = shift;所以@ARGV將是空的。 – tadmc 2011-03-25 12:59:08

+0

使用班次爲我工作,而改變<>到沒有 – Colin 2015-04-11 18:23:11

相關問題