Могу ли я получить помощь в отладке этого кода? - PullRequest
0 голосов
/ 23 июня 2011

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

##Past Participle
sub getPPForBase(){ ##$verb passed in
        my $verb = shift;
        my @verbChars = split(//,$verb); ##Split into characters
        my $verbLen = @verbChars; ##Length of @verbchars, as a number
###PROBLEM HERE:: trying to say last letter is e, second last is i
        if(($verbChars[$verbLen -1] eq "e") && ($verbChars[$verLen -2] eq "i")){
                return substr($verb,0,$verbLen-2)."ying";
        }
    if($verbChars[$verbLen -1] eq "e"){
                return substr($verb,0,$verbLen-1)."ing";
    }
        return $verb."ing";
}

Ошибка:

[Thu Jun 23 13:47:51 2011] [error] [client ::1] Use of uninitialized value $verLen in subtraction (-) at /Users/jon/Desktop/stanford-postagger-full-2011-04-20/verbTenseChanger.pl line 59.

Может кто-нибудь помочь мне разобратьсячто это значит и как это исправить?(Код работает нормально, но я боюсь, что есть скрытая проблема).

Дайте мне знать, если вам нужна дополнительная информация.

Большое спасибо.

Ответы [ 3 ]

3 голосов
/ 23 июня 2011

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

use strict;
use warnings;

Как всегда.Так что сделайте это.

Кроме того, это альтернатива вашей текущей подпрограмме:

sub getPPForBase {
    my $verb = shift;
    return $verb . "ying" if $verb =~ s/ie$//;
    return $verb . "ing"  if $verb =~ s/e$//;
    return $verb . "ing";
}

Использование регулярного выражения в этом случае, я думаю, является наиболее предпочтительным решением, посколькулегче читать.Кроме того, при таком подходе проще добавлять или удалять условия, когда это необходимо, чем пытаться разобраться во всех предложениях if.

2 голосов
/ 23 июня 2011

my $ verbLen

...

$ verbChars [ $ verLen -2]

Одна из этих вещей не похожа на другую ...

2 голосов
/ 23 июня 2011

Это означает, что вы неправильно написали verbLen как verLen.

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