2010-07-30 78 views
0
use Class::Struct; 

    struct (TimingStruct => { 
     _timingSense => '$', 
     _timingType => '$', 
     _relatedPin => '$', 
     _whenCond  => '$' 
     }); 

    struct (OutPinStruct => { 
     _outPinName => '$', 
     _outFunction => '$', 
     _timingarray => '@', #_timingarc => 'TimingStruct' 
     }); 

    my @tarray =(); 
    my $t; 

    $t = TimingStruct->new(_timingSense => 'Unate', 
          _timingType => 'Wave', 
          _relatedPin => 'CO', 
          _whenCond => 'A^B' 
         ); 
    push(@tarray, $t); 
    $t = TimingStruct->new(_timingSense => 'Combinational', 
          _timingType => 'Rising', 
          _relatedPin => 'ICO', 
          _whenCond => 'A^B^CI' 
         ); 

    push(@tarray, $t); 

    my $op = OutPinStruct->new(_outPinName => "CO", 
           _outFunction => "A^B^CI", 
           _timingarray => \@tarray); 


    print $op->_outPinName . "\n"; 
    print $op->_outFunction . "\n"; 
    print $op->_timingarray . "\n"; 
    my $t = ${${$op->_timingarray}[0]}[0]; 
    print "\$t = \$op->_timingarray = $t->_timingSense() \n"; 
    my @t = {$op->_timingarray}; 
    print "\@t = \@{\$op->_timingarray} = $$t[1] \n"; 

每個輸出引腳可以有許多定時弧,OutPinStruct有一個數組來保存定時弧。我不確定取消引用數組(_timingarray)有人可以告訴我,我做錯了什麼?Perl - Class :: Struct Deferencing array

謝謝。

+0

您能更具體地瞭解發生了什麼問題嗎? – Ether 2010-07-30 16:10:02

回答

0

$op->_timingarray是「哈希列表」。一般來說,散列鍵是無序的,不能通過編號索引來查找散列值。您可以訪問的元素是

$op->_timingarray->[0]{'TimingStruct::_whenCond'} 
$op->_timingarray->[0]{'TimingStruct::_timingSense'} 
$op->_timingarray->[0]{'TimingStruct::_relatedPin'} 
$op->_timingarray->[0]{'TimingStruct::_timingType'} 
$op->_timingarray->[1]{'TimingStruct::_whenCond'} 
$op->_timingarray->[1]{'TimingStruct::_timingSense'} 
$op->_timingarray->[1]{'TimingStruct::_relatedPin'} 
$op->_timingarray->[1]{'TimingStruct::_timingType'}