2011-03-25 155 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

相关问题