2011-02-23 17 views
6

Başka bir şirketin API'sini kullanarak elde edilen bir dizi nesneden veri görüntülemeye çalışıyorum, ancak foreach döngüsünü kullanmaya çalıştığımda hata alıyorum.Nesnelerin bir dizisinden veri görüntüleme

Dizideki her şeyi görüntülemek için Dumper kullanıyorum. Dumper dan

print Dumper($object); 

Kısmi çıkışı: Ben çifte dizisi gibi görünse "üye" ayıklamak için çalışıyorum

 
'enable_dha_thresholds' => 'false', 
    'members' => [ 
    bless({ 
     'ipv4addr' => '192.168.1.67', 
     'name' => 'name.something.com' 
    }, 'Something::Network::Member'), 
    bless({ 
     'ipv4addr' => '192.168.1.68', 
     'name' => 'name.something.com' 
    }, 'Something::Network::Member') 
    ], 
    'comment' => 'This is a comment', 

:

//this works  
print $members->enable_dha_thresholds(); 

//this works 
print $members[0][0]->ipv4addr; 

//does not work 
foreach my $member ($members[0]){ 
    print "IP". $member->ipv4addr()."\n"; 
} 

bu hatayı alırsınız: Köprülendirilmemiş başvuruda "ipv4addr" yöntemini ./script.pl satırında çağırma. 12

Eminim Perl'deki "kutsanmamış" ya da "kutsanmamış" ı tamamen anlıyorum.

cevap

8

print $members[0][0]->ipv4addr; //this works

do $ Üyeler [0] bir dizi başvuru kaynağıdır.
Dizideki KQUEUE vardır:

foreach my $member (@{ $members[0] }){ 
    print "IP". $member->ipv4addr()."\n"; 
} 

bir "unblessed referans" atıfta hata Bir nesneyi kullanmıyorsanız söyler; yerine aynı :)

HTH olmayan bir dizi-referansı, Paul

+0

Teşekkürler, tam da aradığım şey buydu. – arcdegree

5

It "dizisindeki" vs "dizi referans" meselesi var sağlarlar. $members[0] bir dizi referansıdır; foreach operatörü dizilerle (veya pedantic olacak listelerle) çalışır. Sen

foreach my $member (@{$members[0]}) { ... 

$members[0] başvurduğu unsurları üzerinde yineleme söylemek isteyecektir.

Sözdizimi zordur ve muhtemelen bu şeylerle ilgili olarak birkaç hata daha yaparsınız. Sizi hızlandırmak için ilgili dokümanlar perlref (veya perlreftut), perllol ve ayrıca perldsc ve perlobj'dur. bu arada "kutsanmış"


bir referans olduğunu nesnenin ne tür "bilir" ve hangi paket o çalıştırabilir hangi yöntemleri görmek için bakmak gerektiği anlamına gelir. Bir "unblessed reference" uyarısı veya hatası aldığınızda, bu genellikle bir nesne beklenen bir nesne olmayan bir şey ilettiğiniz anlamına gelir - bu durumda, $members[0] kutsanmış başvuruları iletmek için kaynaksız referans olduğundan, $members[0][0], $members[0][1] vb.

+0

Teşekkürler, harika çalıştı. – arcdegree

İlgili konular