Perl ref()不打印' HASH'类型

时间:2016-04-23 10:30:01

标签: perl

以下代码不会打印' HASH'类型。这段代码有什么问题?

#! /usr/bin/perl
$prices{'pizza'} = 12.00;
$prices{'coke'} = 1.25;
$prices{'sandwich'} = 3.00;
print ref($prices);

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

从正式的角度来看,答案可能更短:

    如果$ price值是对另一个变量的引用,则
  1. ref($ prices)将返回1,否则返回false。
  2. ref($ prices)是第一次使用未申报的变量$ price(之前的行是指另一个未声明的变量 - 哈希%价格)。
  3. $ price的值是undef,ref($ prices)是一个空字符串。
  4. 可能你的想法是写

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