1
my %hash = {
    'student1' => {
        'Name' => 'aaa',
        'Age'  => '20',
        'Subjects' => ['Maths','Science']
    },
    'student2' => {
        'Name' => 'bbb',
        'Age'  => '22',
        'Subjects' => ['English','Science']
    }
}
my $hashRef = \%hash;

如何使用 hashref 从中提取第二个主题名称?

4

3 回答 3

2

您的声明%hash不正确,请改为:

my %hash = (
    'student1' => {
        'Name' => 'aaa',
        'Age'  => '20',
        'Subjects' => ['Maths','Science']
    },
    'student2' => {
        'Name' => 'bbb',
        'Age'  => '22',
        'Subjects' => ['English','Science']
    }
);

注意括号而不是大括号。

然后得到第二个主题:

say $hashRef->{student1}{Subjects}[1];
于 2013-09-03T08:32:18.107 回答
2

您的代码是错误的,{ } 创建了一个 hashref,并且您将它存储在一个哈希中。你应该做:

my %hash = (
    'student1' => {
        'Name' => 'aaa',
        'Age'  => '20',
        'Subjects' => ['Maths','Science']
    },
    'student2' => {
        'Name' => 'bbb',
        'Age'  => '22',
        'Subjects' => ['English','Science']
    }
);

my $hashRef = \%hash;

甚至更好:

my $hashref = {
    student1 => { ... },
    student2 => { ... },
};

然后你可以访问:

$hashRef->{student2}->{Subjects}[1]
于 2013-09-03T08:34:25.863 回答
0

主题是散列内散列内的数组引用。

$hashRef->{student1}{Subjects}[1]

此外,不要使用大括号来初始化哈希,它们会创建一个匿名哈希。使用圆括号:

my %hash = ( ... );
于 2013-09-03T08:31:57.613 回答