1

だから私はこのようにユーザーからの入力を取得しようとしています:user@server:~sample.pl inputだから私はこのコードを持っています

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

しかし、ユーザーが実行行user@server:~sample.plを入力してからEnterキーを押し、入力を挿入するため、私が望む目的には役立ちませんが、ユーザーにEnterキーを押したくないのです。

私も試しました

$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

これはPerlなので、別の方法があります:-)

my $input = shift @ARGV;

もちろん、これは引数が 1 つしかない場合にのみ機能します。ただし、約 2 つまたは 3 つのパラメーターを使用すると、データをシフトするのが面倒になります。

パラメータが適切に定義されている場合は、次のようなことができます

私 ($name, $zipCode) = @ARGV;

または、ユーザーがすべてのパラメーターを確実に提供するようにしたい場合は、次のようにすることができます

die "Usage: sample.pl [name] [zip]\n" not $zipCode;

これは、最後のパラメーターが入力されたかどうかを簡単にチェックします (検証はまったく行われませんが、それは別のトピックです)。

于 2013-10-15T16:52:51.427 に答える
1

ユーザーがスクリプトから引数として提供する情報のみを読み取りたい。オペレータは、<>提供された引数を開こうとし、 からも読み取りますSTDIN。これにより、ユーザーはスクリプトの実行後に情報を入力できます。

スクリプトへの引数は変数に含まれているため@ARGV(文字列は空白で分割されています)、これを使用して、コマンドの後にインラインで入力されたものに入力を制限できます。

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

この例では、ユーザーが指定した文字列をすべてエコーします。

于 2013-10-15T16:41:47.850 に答える