1

所以我试图像这样从用户那里获得输入:user@server:~sample.pl input所以我用我确实有这个代码

$input = <>;
chomp ($input);
print "$input";

但它不能达到我想要的目的,因为用户将键入执行行user@server:~sample.pl然后按回车键,然后插入他的输入,但我不希望用户按回车键。

我也试过

$input = `<>`;
chomp ($input);
print "$input";

但它崩溃了。

希望我的问题很清楚。

谢谢!

4

3 回答 3

4

Perl 脚本的参数在@ARGV.

>perl -E"say for @ARGV" a b c
a
b
c
于 2013-10-15T16:33:08.127 回答
1

您只想读取用户作为脚本参数提供的信息。操作员将尝试打开提供的<>任何参数,并且还将从 中读取STDIN,这是用户在执行脚本后能够输入信息的方式。

在变量中可以找到脚本的参数@ARGV(字符串以空格分隔),因此您可以使用它来将输入限制为在命令后内联输入的内容:

print join(" ", @ARGV),"\n";

此示例将回显用户提供的任何字符串。

于 2013-10-15T16:41:47.850 回答
1

由于这是 Perl,因此还有另一种方法:-)

my $input = shift @ARGV;

当然,这只有在你只有一个论点时才有效。但是,在大约两个或三个参数之后,转移您的数据会变得乏味。

如果您的参数定义明确,您可以执行类似的操作

我的 ($name, $zipCode) = @ARGV;

或者,如果您想确保用户提供所有参数,您可以执行类似的操作

die "用法:sample.pl [name] [zip]\n" 除非 $zipCode;

它会快速检查是否输入了最后一个参数(绝对没有验证,但这是另一个主题)。

于 2013-10-15T16:52:51.427 回答