2014-03-26 120 views
0

我在OO perl的新返回隨機值,下面是我爲我的學習目的編寫的代碼,但不幸的是我沒有得到正確的輸出:爲什麼對象是Perl

#Calculation.pm

package Calculation; 

sub new 
{ 
    my $class =shift; 
# my $number =shift; 
    my $self ={}; 
    bless ($self,$class); 
    return $self; 
} 

sub add 
{ 
my $val_01=shift; 
my $val_02=shift; 
my $total = $val_01+$val_02; 
    return($total); 

} 

1; 

#Test.pl

#!/usr/bin/perl 

use warnings; 
use strict; 
use Calculation; 
my $obj = Calculation->new(); 

my $result =$obj->add(1,2); 
print"$result\n";  

$結果返回一個隨機值。

回答

2

正如已經指出的那樣,您沒有考慮隱式傳遞給方法調用的第一個參數,通常分配給$self

您也可以省略一些中間變量以簡化操作,當要返回的值是子例程中的最後一條語句時,通常會省略return語句。

代碼的這個變種工作得很好

Calculation.pm

use strict; 
use warnings; 

package Calculation; 

sub new { 
    my $class = shift; 
    bless {}, $class; 
} 

sub add { 
    my $self = shift; 
    my ($val_01, $val_02) = @_; 
    $val_01 + $val_02; 
} 

1; 

Test.pl

use strict; 
use warnings; 

use Calculation; 

my $obj = Calculation->new; 

my $result = $obj->add(1, 2); 

print "$result\n"; 

輸出

3 
6

當您致電$obj->add(1,2)您的add子獲得3個參數:$obj, 1, 2。您正在移動並添加前兩個參數$obj1。當$obj被轉換爲一個用於添加的數字時,將使用其存儲器地址。加1,你會得到一個不太隨機但肯定醜陋的數字。

您只需要在sub add的頂部添加另一個班次。