Schrift
[thread]8413[/thread]

Daten aus Array

Leser: 1


<< |< 1 2 >| >> 13 Einträge, 2 Seiten
Gast Gast
 2006-10-13 13:36
#70743 #70743
Hallo, sicher zu trivial für euch, aber ich hab hier ein Array und möchte einen Wert daraus auslesen.

Mittels:
use Data::Dumper;
print Dumper \@dns_antworten;

hab ich rausgefunden, dass es so aussieht:

$VAR1 = [
[
bless( {
'rdlength' => 15,
'ttl' => 603901,
'name' => '1.71.113.194.in-addr.arpa',
'ptrdname' => 'jds.ronnet.de',
'class' => 'IN',
'type' => 'PTR',
'rdata' => 'jdsronnetde'
}, 'Net::DNS::RR::PTR' )
]
];


Mich intressiert eigentlich nur "ptrdname". Wie komme ich da ran? Für eine Antwort wäre ich dankbar.
havi
 2006-10-13 13:57
#70744 #70744
User since
2003-08-04
2036 Artikel
BenutzerIn
[Homepage]
user image
Code: (dl )
1
2
3
my @array = ("1", "2", "3");
# wie bekomme ich nun z.B. das "2" heraus?
print $array[1]; # ... Perl beginnt bei 0 zu zaehlen
Taulmarill
 2006-10-13 14:00
#70745 #70745
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
versuch mal $dns_antworten[0]->[0]->{ptrdname}

übrigens, die eckigen klammern weisen auf arrays und die geschweiften auf hashes hin. das bless bedeutet, dass es sich dabei nicht um einen einfachen hash handelt sondern um ein objekt der klasse Net::DNS::RR::PTR.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B
Der Gnarl
 2006-10-13 14:07
#70746 #70746
User since
2006-10-13
4 Artikel
BenutzerIn
[default_avatar]
Danke, Taulmarill so funktioniert.
sid burn
 2006-10-13 14:15
#70747 #70747
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Und da es ein Objekt ist, solltest du eigentlich die Klassenmethoden benutzen, und nciht direkt auf das Array drauf zugreifen.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
renee
 2006-10-13 14:16
#70748 #70748
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das ist aber unschön. Wie Taulmarill es gesagt hat: Es ist ein Objekt der Klasse CPAN:Net::DNS::RR::PTR. Dann sollte man auch die Methoden dazu verwenden und nicht direkt auf den Wert zugreifen...

Code: (dl )
$dns_antworten[0]->[0]->ptrdname();
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Der Gnarl
 2006-10-13 14:17
#70749 #70749
User since
2006-10-13
4 Artikel
BenutzerIn
[default_avatar]
Wenn ich wüsste, wie das geht, müsste ich hier keine Fragen über Arrays stellen. :D
renee
 2006-10-13 14:28
#70750 #70750
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich habe Dir doch geschrieben wie das geht...

Du musst Dir nur das Objekt aus dem Array holen (Grundlage von havi plus Info aus perlreftut = Info von Taulmarill). Und dann schaust Du in der Doku zu CPAN:Net::DNS::RR::PTR wie Du auf das Attribut zugreifen kannst...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Der Gnarl
 2006-10-13 14:49
#70751 #70751
User since
2006-10-13
4 Artikel
BenutzerIn
[default_avatar]
[quote=renee,13.10.2006, 12:28]Und dann schaust Du in der Doku zu CPAN:Net::DNS::RR::PTR wie Du auf das Attribut zugreifen kannst...[/quote]
Dort war ich schon, konnte aber mit dem $rr nichts anfangen:

print "ptrdname = ", $rr->ptrdname, "\n";


???

Das Array beziehe ich übrigens aus einem Hash-Wert der mir von:

my $res = Net::DNS::Resolver->new;
$dns_name = $res->query('198.133.219.25');
@dns_antworten=$dns_name->{answer};

bereitgestellt wird. Da kann man sicher auch direkt reinspringen, aber ich hab mir halt so geholfen. (Auch wenn ihr jetzt vielleicht die Hände über den Köpfen zusammenschlagt. ;-) )Für Vorschläge bin ich natürlich offen.

Und welchen Unterschied machts, wenn ich direkt in des Array reingreife oder Klassenmethoden benutze. Ich brauch doch nur den Wert, der da steht und weiter nichts. Ist das schneller, besser oder nur eine rein ideologische Kiste?
renee
 2006-10-13 14:56
#70752 #70752
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das $rr ist einfach das Objekt von CPAN:Net::DNS::RR::PTR.

Auch Dein $dns_name ist ein Objekt. Schreib Deinen Code mal lieber so:
Code: (dl )
1
2
3
4
5
my $res = Net::DNS::Resolver->new;

$dns_name = $res->query('198.133.219.25';);
$antwort=($dns_name->answer)[0];
print $antwort->ptrdname;


Oder wenn Du mehrere DNS-Antworten hast:
Code: (dl )
1
2
3
4
5
6
7
8
my $res = Net::DNS::Resolver->new;

$dns_name = $res->query('198.133.219.25';);
@antworten = $dns_name->answer;

for my $antwort(@antworten){
print $antwort->ptrdname;
}



Kannst Du bitte in Zukunft [code]-Tags um Deinen Code machen? (siehe http://board.perl-community.de/cgi-bin....=ibcode )
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
<< |< 1 2 >| >> 13 Einträge, 2 Seiten



View all threads created 2006-10-13 13:36.