【问题标题】:Pass command line arguments as well as input from STDIN for Perl script?传递命令行参数以及从stdin for perl脚本的输入?
【发布时间】:2011-07-22 19:23:45
【问题描述】:

我有一个 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";

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

有什么原因吗?

【问题讨论】:

  • 对不起,先生,您想要什么?

标签: perl stdin command-line-arguments argv


【解决方案1】:

改变

my $name = <>;

my $name = <STDIN>;

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

【讨论】:

  • 这是一个问题,因为 从 @ARGV 中的文件读取。如果您希望它改为从标准输入读取,则需要确保 @ARGV 为空。修复程序的另一种方法是继续使用 ,但改为:my $logpath = shift;这样@ARGV 将为空。
  • 使用 shift 对我有用,而将 更改为 没有
猜你喜欢
  • 2018-02-09
  • 2018-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-13
  • 2020-05-18
  • 1970-01-01
  • 2016-10-26
相关资源
最近更新 更多