Я пытаюсь работать через то, что должно быть простым упражнением, и с этим я столкнулся с проблемой сравнения двух строк (один в массиве, а другой - как функция). В частности, линия:perl - сравнение двух строк, один параметр подпрограммы
if ($el eq $iName)
не возвращается 1, даже если две строки равны.
Я поместил некоторые строки отладки над этой частью кода, чтобы увидеть, что является значением этого булева, и кажется, что это undef.
#!/usr/bin/perl -w
use v5.14.0;
sub greet {
#early example - no hashes,
#if first ever name print the name,
#if not first and not previously seen, print previous names,
#if same name as one previous, acknowledge this and print previous names
my $iName = $_[0];
state @seen_names;
if ([email protected]_names) {
print "Hello $iName\n";
push @seen_names, "$iName ";
} else {
my $push_name = 0;
foreach my $el (@seen_names) {
#------------------------DEBUG-----------
print "equal? ", ("$el" eq "$iName"), "----\n"; #debug - the boolean looks undef
print "equal? ", ("$el" eq undef), "----\n"; #debug
print "equal? ", ("a" eq "a"), "----\n"; #debug
#------------------------DEBUG-----------
if ($el eq $iName) { #debug - do not get into this if
#FIXME prints *all* names, including this one.
print "hello again $iName, all visitors so far: " , @seen_names, "\n";
} else {
print "hello $iName, all visitors so far: @seen_names.\n";
$push_name = 1;
}
}
if ($push_name) {
push @seen_names, "$iName ";
}
}
}
&greet ("Greg");
&greet ("Greg");
#&greet ("Bob");
#&greet ("James");
#&greet ("Jill");
Куда я иду не так?
Я отредактировал ваш вопрос, чтобы исправить проблему ne/eq. Я удалю свой «ответ» сейчас :-) – vogomatix
Почему вы нажимаете «$ iName» вместо простого $ iName? – sawyer
Возможно, я неправильно истолковал ваш вопрос, но каждый раз, когда я вижу имя, которое еще не встречается, я добавляю его в массив @seen_names (после цикла), который сохраняет свое состояние между вызовами функций. Если имя уже было замечено, переменная $ push_name остается ложной, а входящее в нее имя снова не попадает в массив. – HexedAgain