2016-04-23 2 views

ответ

9

Прежде всего, вы должны поставить use strict; и use warnings; в верхней части вашего сценария (и сделать это для всех будущих кода Perl, а). После этого, вы увидите следующее:

Global symbol "%prices" requires explicit package name at ./a.pl line 4. 
Global symbol "%prices" requires explicit package name at ./a.pl line 5. 
Global symbol "%prices" requires explicit package name at ./a.pl line 6. 
Global symbol "$prices" requires explicit package name at ./a.pl line 7. 
Execution of ./a.pl aborted due to compilation errors. 

Что это означает, что вы пытались использовать для разделения переменных: а %prices хэша и $prices скаляра.

После фиксации объявления переменных с помощью my %prices;, вы можете получить ссылку на свой %prices хэш следующим образом:

my $prices_ref = \%prices; 
print ref($prices_ref); 
0

От формальной точки зрения, ответ может быть короче:

  1. исх ($ цены) вернет 1, если значение цены $ было ссылкой на другую переменную или false в противном случае.
  2. ref ($ prices) - это первое использование необъявленной переменной $ price (предыдущие строки относятся к другой необъявленной переменной - хеш% цены).
  3. Значение $ prices - undef, а ref ($ prices) - пустая строка.
  4. Возможно, ваша идея была написать

    $prices->{'pizza'} = 12.00; $prices->{'coke'} = 1.25; $prices->{'sandwich'} = 3.00; print ref($prices);