【问题标题】:Cant print a hash on a perl module无法在 perl 模块上打印哈希
【发布时间】:2017-07-06 04:25:09
【问题描述】:

我有一个 .pm 包测试文件,其中包含:

sub new{
my $hash = shift;
my $self = {};
bless($self,$class);
$self->{hash} = %hash;
return $self;}

sub printer{
my $self = shift;
print("Test: ",$self->{hash},"\n");
return;}

在我的 main.pl 上,我使用:

$test = Test->new(%myhash);

我不知道解释是否正确,但问题是我无法使用我的打印机功能打印我的哈希值。 我真的很感激有关它的一些帮助,如果需要有关它的更多信息,我可以在此处粘贴所有文件。

【问题讨论】:

  • 什么是$class? $hash 和 %hash 是不同的变量。 test = 可能是错误的,如果test 是一个变量,它应该以$ 开头。
  • $class 是我的Test,也就是包名。关于我修复的测试变量,是类型错误。

标签: perl hash module package


【解决方案1】:

->new 的第一个参数是类名。接下来是构造函数的参数。不硬连线类名也使继承成为可能。

你了解散列和散列引用之间的区别吗? %hash 是一个哈希,\%hash 是一个哈希引用。如果$test->{hash} 包含哈希引用,您可以使用%{ $test->{hash} } 取消引用它(即从中检索哈希)。哈希值必须是标量,这意味着您不能将哈希值设为哈希值 - 但您可以让哈希值引用该值。

我还建议正确缩进代码。

#! /usr/bin/perl
use warnings;
use strict;

{
    package Test;

    sub new {
        my ($class, %hash) = @_;
        bless { hash => \%hash }, $class;
    }

    sub printer {
        my $self = shift;
        print "Test: ", %{ $self->{hash} }, "\n";
    }
}


my %hash = ( a => 11, b => 12 );
my $t = 'Test'->new(%hash);
$t->printer;  # a11b12 or b12a11

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 2017-09-30
    • 2016-12-18
    • 2012-07-22
    • 1970-01-01
    • 2012-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多