2017-07-05 48 views
-2

我有包含的.pm包裝測試文件上的哈希:廣東話打印Perl模塊

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); 

我不知道是否正確解釋,但問題是我無法使用我的打印機功能打印我的散列。 我真的很喜歡它的一些幫助,如果需要更多的信息,我可以在這裏粘貼所有的文件。

+2

什麼是$ class? $ hash和%hash是不同的變量。 'test ='可能是錯誤的,如果'test'是一個變量,它應該以'$'開始。 – choroba

+0

$ class是我的Test,它是包名。關於我修正的測試變量,是一個類型錯誤。 –

回答

3

->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