我的目標是使用相同的代碼來維護單獨的變量堆棧。真正的子需要多次調用,每個實例都有自己的數組。我在一個面向對象的解決方案已失敗:Perl包實例可以維護不同的變量值嗎?
package pkg_magic;
sub new{my $pkg={}; bless $pkg; return $pkg;}
my $keep;
sub set{my $self=shift; $keep=shift;}
sub show{my $self=shift; print"$self $keep\r\n";}
1;
從叫了兩聲:
#!/usr/bin/perl
use strict;
use warnings;
push(@INC,".");
use pkg_magic;
my $inst1=pkg_magic->new;
$inst1->set("inst1");
$inst1->show();
my $inst2=pkg_magic->new;
$inst2->set("inst2");
# call first instance, not second
$inst1->show();
exit;
給出的輸出:
pkg_magic=HASH(0x2020f88) inst1
pkg_magic=HASH(0x2020f88) inst2
顯然正在達到相同的子,即使它被稱爲不同的對象。如果我將包代碼複製到單獨的文件中並重命名這些子集(set1,set2等),所有工作都如所願,所以我只是試圖簡化代碼維護。我是否錯過了上面的東西,或者走錯了方向?
Perl的類是比在其他語言中類不同。你應該閱讀[perlootut](http://perldoc.perl.org/perlootut.html)以開始。如果你想了解更多細節,你應該閱讀[perlobj](http://perldoc.perl.org/perlobj.html)。有分佈試圖隱藏你的細節;像[Moose](http://p3rl.org/Moose),[Mouse](http://p3rl.org/Mouse),[Moo](http://p3rl.org/Moo)等等。 –