powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод массива (perl)
7 сообщений из 7, страница 1 из 1
Вывод массива (perl)
    #32643042
Alex2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ подскажите пожалуйста.
Пришлось срочно разобраться в чужом коде на перловке, а перловку я не знаю.

В общем заполняется массив таким образом:
push @{$mac2{$mac}}, [ $ip1, $desc ] ; # adding reference of array to array in a hash

как мне далее в программе вывести элементы этого массива.
Я так подозреваю что в качестве индекса этого хэша обычный mac (строка), а в качестве значения элемента массив из двух элементов (не важно какого типа). Только прикол весь в том, что в хэш заносится не значение а ссылка.

В общем спецы подскажите как вывести этот хэш со всеми элементами, и если что-то я не так понял поправьте пожалуйста.
Заранее спасибо!
...
Рейтинг: 0 / 0
Вывод массива (perl)
    #32643126
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alex2005Народ подскажите пожалуйста.
Пришлось срочно разобраться в чужом коде на перловке, а перловку я не знаю.

В общем заполняется массив таким образом:
push @{$mac2{$mac}}, [ $ip1, $desc ] ; # adding reference of array to array in a hash

как мне далее в программе вывести элементы этого массива.
Я так подозреваю что в качестве индекса этого хэша обычный mac (строка), а в качестве значения элемента массив из двух элементов (не важно какого типа). Только прикол весь в том, что в хэш заносится не значение а ссылка.

В общем спецы подскажите как вывести этот хэш со всеми элементами, и если что-то я не так понял поправьте пожалуйста.
Заранее спасибо!

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
#все:

foreach my $mac ( keys %mac2 ) {
    print "MAC: $mac\n";
    foreach my $ref ( @{$mac2{$mac}} ) {
        print "\tIP: ", $ref->[ 0 ], ", DESC: ", $ref->[ 1 ], "\n";
    }
}

#конкретный:

print "IP = ", $mac2{$mac}->[ 0 ]->[ 0 ], "\n";
...
Рейтинг: 0 / 0
Вывод массива (perl)
    #32643241
Alex2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за ответ, но:
1. Вариант "конкретный" пишет "Use of uninitialized value in print" хотя данные в хэше точно есть.
2. Вариант "все" начал что-то выводить только когда добавил один символ в код (первая строка). Код стал такой:

foreach my $mac ( keys %$mac2 ) {
print "MAC: $mac\n";
foreach my $ref ( @{$mac2{$mac}} ) {
print "\tIP: ", $ref->[0], ", DESC: ", $ref->[1], "\n";
}
}

да и он выводит только строки MAC: а те что с IP не выводит. Так что опять обращаюсь за помошью...
...
Рейтинг: 0 / 0
Вывод массива (perl)
    #32643280
sky2k
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kogda-to toje nujno bylo raspechatat' structuro is hashei i massivov, napisal funciu tipa print_r v php

primer:
my $a = {
'2' => [
3,
{
'test' => 'test'
}
]
};
debug_print_struct($a)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
my $dprst_num = - 1 ;
sub debug_print_struct_print {print("\t" x $dprst_num . shift());};
sub debug_print_struct {
    my ($ref, $name) = @_;
    $name = 'DEF' if !defined($name);
    $dprst_num++;
    exit( 0 ) if $dprst_num >  10 ;
    if (ref($ref) eq 'HASH'){
        debug_print_struct_print("$name = HASH {\n");
        foreach my $k (sort(keys(%$ref))){debug_print_struct($ref->{$k}, $k);};
        debug_print_struct_print("     }\n");
    } elsif (ref($ref) eq 'ARRAY') {
        debug_print_struct_print("$name = ARRAY [\n");
        foreach (my $i =  0 , my $j = scalar(@$ref); $i < $j; $i++){
            debug_print_struct($ref->[$i], $i);  };
        debug_print_struct_print("     ]\n");
    } elsif (ref($ref) eq 'SCALAR' || !ref($ref)) {
        debug_print_struct_print("$name = ".(defined($ref)?((ref($ref) eq '')?$ref:$$ref):'UNDEF')."\n"
    };
    $dprst_num --; 
};
...
Рейтинг: 0 / 0
Вывод массива (perl)
    #32643295
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у тебя mac2 ( судя по тому как он пользуется $mac2{...} ) это именно хеш а не ссылка на хеш
ты же пытаешся использовать ссылку на несуществующий хеш %$mac2...

то что я писал у меня выводит следующее:
(собственно код еще раз)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
#!/usr/bin/perl

use strict;

my %mac2;
my $mac="xxxxx";
my $ip1 = "192.168.108.127";
my $desc = "test";

push @{$mac2{$mac}}, [ $ip1, $desc ];


foreach my $mac ( keys %mac2 ) {
    print "MAC: $mac\n";
    foreach my $ref ( @{$mac2{$mac}} ) {
        print "\tIP: ", $ref->[ 0 ], ", DESC: ", $ref->[ 1 ], "\n";
    }
}

print "IP = ", $mac2{$mac}->[ 0 ]->[ 0 ], "\n";


ну и то что на выходе:


gosha@b127:/tmp> perl 1.pl
MAC: xxxxx
IP: 192.168.108.127, DESC: test
IP = 192.168.108.127
gosha@b127:/tmp>


если у тебя таки ссылка на хеш ( хотя повторюсь то что у тебя в первом сообщении было это не ссылка а именно хеш ) то пользуйся во втором foreach
конструкцией вида:
foreach my $ref ( @{$mac2->{$mac} } )


ну и вариант "конкретный" :))
print "IP = ", $mac2->{$mac}->[0]->[0], "\n";

собственно если после ''
...
Рейтинг: 0 / 0
Вывод массива (perl)
    #32643308
g613
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sky2kkogda-to toje nujno bylo raspechatat' structuro is hashei i massivov, napisal funciu tipa print_r v php

primer:
my $a = {
'2' => [
3,
{
'test' => 'test'
}
]
};
debug_print_struct($a)



дык есть же Data::Dumper

Код: plaintext
1.
2.
use Data::Dumper;
print Dumper($a);
...
Рейтинг: 0 / 0
Вывод массива (perl)
    #32643337
Alex2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Парни, огромное спасибо за ответы!!!
С ссылками у меня тоже немножко не прокатило, видимо знаний моих не хватает.
А вот Data::Dumper это вешь - взял и вывел мне все, что я хотел. (Хотя если он вывел значит все-таки у меня там не ссылка наверное, в общем не знаю).
Еще раз огромное всем спасибо.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Вывод массива (perl)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]