программа, демонстрирующая странное поведение при чтении слов из файла - PullRequest
0 голосов
/ 06 февраля 2012

Итак, у меня есть два файла, один из которых содержит мой текст, а другой - файл фильтра.Предполагается, что показанный здесь тот, у которого есть ругательства.По сути, я перебираю каждое из слов в текстовом файле и пытаюсь сравнить их со словами проклятия.

sub filter {
    $word_to_check = $_;

    open ( FILE2, $ARGV[1]) || die "Something went wrong. \n";

    while(<FILE2>) {
            @cursewords = split;
            foreach $curse (@cursewords) {
                    print $curse."\n";
                    if($word_to_check eq $curse) { return "BAD!";}
            }
    }
    close ( FILE2 );
}

Вот «ругательства»:

what is

Вот текстовый файл:

hey dude what is up

Но вот что идет не так.Как вы можете видеть, я поместил оператор print, чтобы проверить, правильно ли проверяются проклятые слова.

hey what
is
dude what
is
what what
is
is what
is
up what
is

Я буквально понятия не имею, почему это могло произойти.Пожалуйста, дайте мне знать, если я должен отправить больше кода.

РЕДАКТИРОВАТЬ:

АГА!спасибо злой отто.Кажется, я запутался с другим заявлением о печати, которое я вставил ранее.Теперь проблема остается: я думаю, что я не проверяю на равенство строк правильно.Вот где фильтр вызывается:

    foreach $w( @text_file_words )
    {
            if(filter($w) eq "BAD!")
            {
                    #do something here
            }
            else { print "good!"; }
    }

РЕДАКТИРОВАТЬ 2: Бессмысленно, больше глупости с моей стороны.Мне нужно немного поспать, спасибо, злой Отто.

Ответы [ 2 ]

1 голос
/ 06 февраля 2012

изменение

$word_to_check = $_;

до

$word_to_check = shift;
0 голосов
/ 06 февраля 2012

Вам нужно было собрать аргументы в виде массива в perl ...

sub myFunction{
   ($wordToCheck) = @_; #this is the arg array, if you have more than one arg you just separate what's between the parenthesis with commas. 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...