Perl - Сравните <STDIN>с Hash Key & Value - PullRequest
0 голосов
/ 07 мая 2018

Я пытаюсь сравнить, соответствуют ли два входа ($ name, $ place) соответствующему ключу и значению хэша. Таким образом, если $ name соответствует ключу, а $ place соответствует значению этого ключа, выводится «Correct». Мой код, к сожалению, неверен. Какие-либо предложения? Спасибо!

use 5.010;
use strict;
use warnings;

my ($name, $place, %hash, %hash2);       
%hash = (
Dominic => 'Melbourne',
Stella => 'Beijing',
Alex => 'Oakland',
);
%hash2 = reverse %hash;

print "Enter name: ";
$name = <STDIN>;
print "Enter place: ";
$place = <STDIN>;


chomp ($name, $place);


if ($name eq $hash{$name} && $place eq $hash2{$place}) {
    print "Correct!\n";
} else {
    print "NO!\n";
}

1 Ответ

0 голосов
/ 08 мая 2018

Хотя многое можно сделать, чтобы исправить это (не связанное с вопросом), но вот минимальное необходимое решение:

use 5.010;
use strict;
use warnings;

my %hash = (
Dominic => 'Melbourne',
Stella => 'Beijing',
Alex => 'Oakland',
);

print "Enter name: ";
my $name = <STDIN>;
print "Enter place: ";
my $place = <STDIN>;

if ($name and $place) {
  chomp ($name, $place);
  if (exists($hash{$name}) and ($place eq $hash{$name})) {
      print "Correct!\n";
  } else {
      print "NO!\n";
  }
} else {
  print "ERROR: Both name and place required to make this work!";
}

Когда вы читаете из STDIN, вам нужно проверить правильность ввода, в противном случае вы получите эти проблемы в своем результате (не говоря уже о «Исправить!» В конце) с неожиданным вводом:

Enter name:
Enter place:
Use of uninitialized value $name in chomp at original.pl line 19.
Use of uninitialized value $place in chomp at original.pl line 19.
Use of uninitialized value $name in hash element at original.pl line 22.
Use of uninitialized value $name in string eq at original.pl line 22.
Use of uninitialized value in string eq at original.pl line 22.
Use of uninitialized value $place in hash element at original.pl line 22.
Use of uninitialized value $place in string eq at original.pl line 22.
Use of uninitialized value in string eq at original.pl line 22.
Correct!

Вместо этого должно быть сгенерировано с проверенным кодом ошибки:

Enter name:
Enter place:
ERROR: Both name and place required to make this work!

PS: Пожалуйста, примите мои изменения объявления переменных, это просто OCD от меня, не связанного с рассматриваемым вопросом. Как я уже сказал, многое можно сделать.

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