11

コマンドライン引数と 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";

stdin 入力では停止しません。コマンドラインまたは標準入力のいずれかでは正常に機能しますが、両方では機能しません。

何らかの理由?

4

1 に答える 1

19

変化する

my $name = <>;

my $name = <STDIN>;

要素がない場合@ARGV、diamond演算子はから読み取りSTDINますが、この場合、コマンドラインから引数を渡すため、@ARGV空にはなりません。したがって、diamond演算子<>を使用して名前を読み取ると、コマンドラインで名前が指定されているファイルの最初の行が読み取られます。

于 2011-03-25T10:16:47.247 に答える