![]() |
![]() | #1 |
Guru Apprentice Join Date: 02 2002 Location: /dev/null Age: 44
Posts: 524
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Folks, нужна помощь в Perl. Функция as_struct() в примере возвращает reference to a HASH. Все мои попытки вытащить из этого Хаша его ключи пока что приводят к разным ошибкам типа: Type of arg 1 to keys must be hash (not private variable) Как мне ему правильно об'яснить чего я от него хочу? Example: Code: my $hashref = $mesg->as_struct(); print keys $hashref; print keys $$hashref; |
![]() |
![]() | #2 |
Guru Apprentice Join Date: 02 2002 Location: /dev/null Age: 44
Posts: 524
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Отвечу самому себе: надо писать Code: my $hashref = $mesg->as_struct(); print keys %{$hashref} |
![]() |
![]() | #3 | |
ЙЦУКЕН Join Date: 07 2002 Location: 0x68,0x69,0x72, 0x69,0x6e,0x67, 0x20,0x6e,0x6f, 0x77 Age: 51
Posts: 3,118
Downloads: 0 Uploads: 0
Reputation: 5 | 0 | ![]() Quote:
а сразу сказать, что это HASH, без кастинга, слабо ? ![]() или я что-то не понял ![]() | |
![]() |
![]() | #4 |
Guru Apprentice Join Date: 02 2002 Location: /dev/null Age: 44
Posts: 524
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
Не понял вопроса, но приведу весь код, чтобы ясно было что я делаю. Если будут предложения по оптимизации - с радостью выслушаю. Code: my $ldap = Net::LDAP->new($ldap_server) or die "[email protected]"; my $mesg = $ldap->bind($root_dn, password=>$root_dn_passwd) or die "[email protected]"; $mesg = $ldap->search(base => "dc=cs,dc=may,dc=ie", filter => "objectClass=posixAccount"); my $hashref = $mesg->as_struct(); foreach my $dn (keys %{$hashref})... ну и так далее результат поиска можно заполучить разными методами. as_struct представляет этот самый результат как упомянутый ранее reference to HASH. |
![]() |
![]() | #5 | |
Guru Apprentice Join Date: 02 2002 Location: /dev/null Age: 44
Posts: 524
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
О, я не заметил что nm изменил код когда квотил мой пост: Code: my %hashref = $mesg->as_struct(); print keys %hashref; Quote:
| |
![]() |
![]() | #6 | |
ЙЦУКЕН Join Date: 07 2002 Location: 0x68,0x69,0x72, 0x69,0x6e,0x67, 0x20,0x6e,0x6f, 0x77 Age: 51
Posts: 3,118
Downloads: 0 Uploads: 0
Reputation: 5 | 0 | ![]() Quote:
тогда наверно все-таки Code: my %hashref = %{$mesg->as_struct()}; print keys %hashref; 2-ой пост видимо был правильным ![]() ![]() | |
![]() |
![]() | #7 |
Guru Apprentice Join Date: 02 2002 Location: /dev/null Age: 44
Posts: 524
Downloads: 0 Uploads: 0
Reputation: 0 | 0 | ![]()
В итоге получились две работающие версии: Code: my $hashref = $mesg->as_struct(); foreach my $dn (keys %{$hashref}){ print "$hashref->{$dn}->{'uid'}->[0]\n"; } Code: my %hashref = %{$mesg->as_struct()}; foreach my $dn (keys %hashref){ print "$hashref{$dn}->{'uid'}->[0]\n"; } I love Perl!!! можно извращатся!!! |
![]() |
![]() | #8 |
★★★★★★★★★★★★★ Join Date: 08 2004 Location: London, UK Age: 41
Posts: 16,531
Downloads: 8 Uploads: 0
Reputation: 482 | 7 | ![]()
Robert's perl tutorial - первое што выдаст гугл - хороший справочник ...
|
![]() |
![]() | #9 |
ЙЦУКЕН Join Date: 07 2002 Location: 0x68,0x69,0x72, 0x69,0x6e,0x67, 0x20,0x6e,0x6f, 0x77 Age: 51
Posts: 3,118
Downloads: 0 Uploads: 0
Reputation: 5 | 0 | ![]()
2-ой вариант правильнее чисто идеологически .... т.к. перл уже знает, что $hashref - это переменная типа HASH и соответственно будет ругаться на изпользование в другом конкексте -- следовательно вероятность сделать ошибку уменьшится |
![]() |
Sponsored Links |