Вы можете получить количество записей на втором уровне с помощью функции keys
в скалярном контексте, и вы можете получить только значения на втором уровне с помощью values
функция.
#!/usr/bin/perl
use strict;
use warnings;
my %register = (
Science_class => {
1 => "George",
2 => "Lisa",
3 => "Mathias",
},
Math_class => {
1 => "Martin",
2 => "Anna",
3 => "Peter",
4 => "George",
}
);
for my $class (keys %register) {
print "$class: ", scalar keys %{$register{$class}},
" ", join(", ", values %{$register{$class}}), "\n";
}
Однако, учитывая структуру ваших данных, хэш arrayrefs имеет больше смысла:
#!/usr/bin/perl
use strict;
use warnings;
my %register = (
Science_class => [
"George",
"Lisa",
"Mathias",
],
Math_class => [
"Martin",
"Anna",
"Peter",
"George",
]
);
for my $class (keys %register) {
print "$class: ", scalar @{$register{$class}},
" ", join(", ", @{$register{$class}}), "\n";
}
Вы можете найти чтение perldoc perldsc
полезно для понимания того, как создавать и манипулировать структурами данных в Perl 5.