Как сохранить данные о человеке в массивах Perl
Я хотел бы сохранить сведения об ученике в массиве с некоторыми ключами в сценариях Perl. Как я могу это сделать?
например как в TCL
array set student{}
set student(ID1,name) = "abcd"
set student(ID1,grade) = "A"
set student(ID1,bloodGroup) = "A+"
set student(ID2,name) = "abcd"
set student(ID2,grade) = "B"
set student(ID2,bloodGroup) = "O+"
Есть ли способ, как я могу сохранить такую информацию в Perl и извлечь информацию на основе идентификатора и имени или класса или группы крови в Perl?
3 ответа
Перевод каждой из ваших строк TCL непосредственно в Perl:
# This is an "associative array" and they are called "hashes" in Perl.
# array set student{}
my %student;
# set student(ID1,name) = "abcd"
$student{ID1}{name} = 'abcd';
# set student(ID1,grade) = "A"
$student{ID1}{grade} = 'A';
# set student(ID1,bloodGroup) = "A+"
$student{ID1}{bloodGroup} = 'A+';
# set student(ID2,name) = "abcd"
$student{ID2}{name} = 'abcd';
# set student(ID2,grade) = "B"
$student{ID2}{grade} = 'B';
# set student(ID2,bloodGroup) = "O+"
$student{ID2}{bloodGroup} = 'O+';
Чтобы получить группу крови всех студентов, вы можете запустить код, подобный следующему:
foreach (keys %student) {
say "Student: $student{$_}{name}, Blood group: $student{$_}{bloodGroup}";
}
Обновление: если у вас были все данные при создании хэша, вы можете инициализировать всю структуру данных в одном выражении.
my %student = (
ID1 => {
name => 'abcd',
grade => 'A',
bloodgroup => 'A+',
},
ID2 => {
name => 'abcd',
grade => 'B',
bloodgroup => 'O+',
},
);
#!/usr/bin/perl
use strict;
use warnings;
my $student_data = {
id1 => {
name => 'abcd',
grade => 'A',
bloodgroup => 'A+'
},
id2 => {
name => 'abcd',
grade => 'B',
bloodgroup => 'O+'
}
};
print $student_data->{id1}->{name};
print $student_data->{id1}->{grade};
print $student_data->{id2}->{name};
print $student_data->{id2}->{grade};
Также прочитайте:
Вы можете использовать с хешами или многомерным массивом для этого лучше.
my @student = (
{
'name' => 'abcd',
'grade' => 'A',
'bloodgroup' => 'A+',
},
);
print $student[0]{'grade'}, "\n";