Как мой Perl-код может поймать Ctrl + D? - PullRequest
2 голосов
/ 22 июля 2011
chomp($input = <>);

Как узнать, является ли $input Ctrl + D ?

Ответы [ 3 ]

2 голосов
/ 22 июля 2011

Я думаю, в вашем вопросе ctrl-d равносильно EOF, как в UNIX?С некоторым файловым дескриптором в $fh:

while ( <$fh> ) {
  # use $_ here
}

Или, если вы настаиваете на явной ясности, чтобы объяснить, что Perl делает за кулисами:

while ( defined( $_ = <$fh> ) ) {
  # use $_ here
}

Или используйте другую переменную:

while ( defined( my $in = <$fh> ) ) {
  # use $in here
}
2 голосов
/ 22 июля 2011

Вы знаете, что достигли eof, когда получили undef от <>, но в вашем случае chomp скрывает его.

Обычная идиома Perl для чтения до EOF выглядит следующим образом:

while(<>) {
  chomp;
  # do whatever you want with the line in $_
  # ...
}
0 голосов
/ 22 июля 2011

Кажется, что все добавляют много к вопросу, который вы задали.

Проще говоря, для:

chomp($input = <>);

Вы можете сказать, что ^D была нажата с помощью:

print "EOF reached\n" if not defined $input;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...