Как сохранить данные о человеке в массивах 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";

Ссылка1 Ссылка2

Другие вопросы по тегам