Как я могу узнать, не было ли приведено никаких аргументов и ничего не поступает на стандартный ввод? - PullRequest
3 голосов
/ 23 августа 2011

Мне бы хотелось, чтобы Perl-скрипт, который я пишу, отображал справочное сообщение, если он не получает ввода.

Как я могу определить, что ничего не приходит на стандартный ввод?

Ответы [ 5 ]

8 голосов
/ 24 августа 2011
if (@ARGV == 0 && -t STDIN && -t STDERR) { 
    print STDERR "$0: WARNING: reading input from keyboard, type ^D for EOF, ^C to intr.\n";
}
0 голосов
/ 24 августа 2011

Можно проверить, поступило ли что-то с на STDIN (с использованием неблокирующего чтения, select или ioctl FIONREAD), но невозможно проверить, идет ли что-то на stdin, поскольку это еще не произошло.

Невозможность в стороне, вы просите нарушить соглашение.Например, возьмите cat, perl, sort и т. Д. И т. Д. Если вы не предоставите аргументов, они с радостью будут ждать на STDIN, пока вы не предоставите то, что ему нужно.

Пользователь знает, какиспользуйте man tool или tool --help для получения информации.

0 голосов
/ 24 августа 2011

Вы также можете найти этот часто задаваемый вопрос perldoc полезным для проверки наличия ввода с клавиатуры:

http://perldoc.perl.org/perlfaq8.html#How-do-I-check-whether-input-is-ready-on-the-keyboard%3f

0 голосов
/ 24 августа 2011

Если вы говорите о вводе из STDIN, вы можете проверить, равна ли переменная пустой строке (после удаления CR / LF). Например:

my $myInput = <STDIN>;
chomp($myInput);
if ($myInput eq "")
{
    print "Error! You didn't submit any data!\n";
}

Однако, как говорит @ thnee , если вы проверяете аргументы, передаваемые через командную строку, вы должны использовать $ # ARGV.

Например:

if ($#ARGV == -1)
{
    print "Error! No input arguments entered!\n";
    exit(-1);
}

Ссылки:

http://perldoc.perl.org/functions/chomp.html

http://perldoc.perl.org/perlvar.html

0 голосов
/ 24 августа 2011

$#ARGV содержит количество аргументов.

http://www.devdaily.com/perl/perl-command-line-arguments-read-args

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...