Когда eval
«не работает», он устанавливает специальную переменную $@
с ошибкой, с которой столкнулся Perl при вычислении выражения. В вашем случае это сообщение
syntax error at (eval 1) line 2, at EOF
, поскольку текстовый текст
My name is $person->{name}.
не может быть проанализирован как код Perl. Но легко исправить это заключить этот текст в кавычки.
my $msg='"My name is $person->{name}."';
my $person={ name=>'Peter', gender=>'Male' };
print eval $msg;
Вывод:
My name is Peter.
Другими способами исправить эту программу является отправка цитируемого текста на eval
:
my $msg='My name is $person->{name}.';
print eval "\"$msg\"";
print eval qq/"$msg"/;