传递命令行参数以及来自STDIN的Perl脚本输入?

nav*_*gde 11 perl stdin argv command-line-arguments

我有一个Perl脚本,它接受命令行参数和STDIN

#!/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";
Run Code Online (Sandbox Code Playgroud)

它不会在stdin输入处停止.适用于任何一个命令行或标准输入,但不适用于两者.

任何原因?

cod*_*ict 19

更改

my $name = <>;
Run Code Online (Sandbox Code Playgroud)

my $name = <STDIN>;
Run Code Online (Sandbox Code Playgroud)

如果@ARGV没有元素,那么菱形运算符将读取STDIN但在您的情况下,因为您通过命令行传递参数,@ARGV将不会为空.因此,当您使用菱形运算符<>来读取名称时,将读取名称在命令行中指定的文件的第一行.

  • 这是一个问题,因为<>从@ARGV中的文件读取.如果您希望它从stdin读取,那么您需要确保@ARGV为空.修复程序的另一种方法是继续使用<>,但更改为:my $ logpath = shift; 这样@ARGV将为空. (6认同)