Perl если не работает? - PullRequest
       20

Perl если не работает?

2 голосов
/ 04 февраля 2011

Вот мой код:

#!/usr/bin/env perl

sub start
{
    ...
}

sub stop
{
    ...
}

if (defined $ARGV[0])
{
    if ($ARGV[0]=='start') {start}
    elsif ($ARGV[0]=='stop') {stop}
    else {die "Unrecognized command: $ARGV[0]"}
}

Что бы я ни делал, оно всегда выполняется &start. Я что-то не так делаю?

Я использую Linux Mint 10 и Perl 5.10.1.

Ответы [ 2 ]

14 голосов
/ 04 февраля 2011

Вы используете числовое сравнение, чтобы проверить равенство строк, которое преобразует аргументы в числа перед их сравнением.

В этом случае 'start' не является числом, поэтому оно преобразуется в 0;значение в $ARGV[0] (которое здесь должно быть словом) также преобразуется, что приводит к другому 0 и конечному условию if (0 == 0), которое всегда истинно.

Вы хотите использоватьвместо этого eq оператор сравнения по строке:

if ($ARGV[0] eq 'start') { start }

См. документы для получения дополнительной информации о различных операторах сравнения.

Обратите внимание, что (как былокак указано в комментариях) включение use warnings; вверху вашего скрипта заставило бы perl предупредить вас об этом с самого начала.Как правило, всегда включайте use warnings; и use strict;, так как это помогает обнаруживать ошибки такого рода на ранних этапах.

2 голосов
/ 04 февраля 2011

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

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