Что не так с моим Perl-скриптом? - PullRequest
0 голосов
/ 10 августа 2011

Ниже приведен мой код, в основном, если ответ «Y», тогда скрипт запускает сообщение, если это что-то еще, затем закрывается.

#! usr/bin/perl
print "Do you wish to run Program? [Y/N]:";
$answer = <>;
if($answer == "Y") {
 print "COOOL\n";
} else {
 system "exit"
}

Ответы [ 7 ]

6 голосов
/ 10 августа 2011

Perl точно скажет вам, в чем проблема, если вы об этом спросите.Просто добавьте «use warnings» в ваш код.

#!/usr/bin/perl
use warnings;

print "Do you wish to run Program? [Y/N]:";
$answer = <>;
if($answer == "Y") {
 print "COOOL\n";
} else {
 system "exit"
}

Затем, запустив его, вы получите:

$ ./y
Do you wish to run Program? [Y/N]:Y
Argument "Y" isn't numeric in numeric eq (==) at ./y line 6, <> line 1.
Argument "Y\n" isn't numeric in numeric eq (==) at ./y line 6, <> line 1.
COOOL

Еще лучше, если вы добавите «use диагностику».

$ ./y
Do you wish to run Program? [Y/N]:Y
Argument "Y" isn't numeric in numeric eq (==) at ./y line 7, <> line 1 (#1)
    (W numeric) The indicated string was fed as an argument to an operator
    that expected a numeric value instead.  If you're fortunate the message
    will identify which operator was so unfortunate.

Argument "Y\n" isn't numeric in numeric eq (==) at ./y line 7, <> line 1 (#1)
COOOL

Программирование на Perl будет намного проще, если вы позволите Perl помочь вам найти ошибки.

5 голосов
/ 10 августа 2011

Удалить перевод строки. == для числового равенства, для строки вам нужно eq.

chomp($answer);
if($answer eq "Y") {
2 голосов
/ 10 августа 2011

Возможно, будет лучше использовать Term :: Prompt или IO :: Prompt. Не изобретай велосипед:)

use IO::Prompt;
prompt -yn, 'Do you wish to run Program?' or exit;
2 голосов
/ 10 августа 2011

Когда вы задаетесь вопросом, что происходит, начните отслеживать свой ввод.Убедитесь, что это то, что вы думаете:

#!/usr/bin/perl
use strict;
use warnings;

print "Do you wish to run Program? [Y/N]:";
$answer = <>;

print "Answer is [$answer]\n";

Поскольку вы поставили скобки вокруг переменной, вы заметите любые дополнительные пробелы.Вы должны увидеть дополнительные вещи в $answer:

Answer is [Y
]

Это ваша подсказка, что вам нужно что-то предпринять для этого.проблемы, прежде чем они будут проблемами.

1 голос
/ 10 августа 2011

У вас есть символ новой строки, chomp $answer и $answer eq "Y"

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

Помимо chomp / chop и eq против ==, вам также нужно помнить случай ответа.Вы проверяете UPPERCASE 'Y', я готов поспорить, что вы вводите строчную 'y', и они не равны.Я бы предложил использовать:

 if (($answer eq 'y') || ($answer eq 'Y')) {

или использовать uc .

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

Вы используете числовой == для сравнения своих строк.

Вы, вероятно, хотите использовать "eq":

if($answer eq "Y") {
    print "COOOL\n";
} else {
     system "exit"
}

И, как другие предлагали, вы захотите удалитьперевод строки в конце.Используйте chomp.

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