📜  Perl 哈希(1)

📅  最后修改于: 2023-12-03 15:18:17.850000             🧑  作者: Mango

Perl 哈希

哈希 (Hash) 是 Perl 中最常用的数据类型之一。哈希是一个无序的键值对 (key-value) 序列,在 Perl 中用花括号 {} 表示。

定义哈希

定义一个哈希可以使用以下语法:

my %hash = (
    key1 => 'value1',
    key2 => 'value2',
    key3 => 'value3'
);

其中 my 关键字用来声明一个变量。 %hash 表示一个哈希变量。 key1, key2, key3 是键,而 'value1', 'value2', 'value3' 是对应的值。键和值用 => (又称为“胖箭头”) 连接。

哈希也可以通过一组列表来定义:

my %hash = qw(
    key1 value1
    key2 value2
    key3 value3
);

其中 qw 是 Perl 中的特殊用法,用于创建一个单引号的字符串列表。

访问哈希

哈希中的元素可以通过键来访问。例如:

$hash{key1} = 'new_value1';  # 用新的值替换 key1 的原始值
my $value2 = $hash{key2};    # 取出 key2 对应的值
delete $hash{key3};          # 删除 key3
遍历哈希

遍历哈希可以用 keysvalues 或者 each 函数。

# 遍历哈希的键
foreach my $key (keys %hash) {
    print "$key\n";
}

# 遍历哈希的值
foreach my $value (values %hash) {
    print "$value\n";
}

# 遍历哈希的键值对
while (my ($key, $value) = each %hash) {
    print "$key => $value\n";
}
哈希的嵌套

哈希中可以嵌套另一个哈希,也可以将哈希作为值存储在数组中。例如:

my %hash1 = (
    key1 => 'value1',
    key2 => {
        subkey1 => 'subvalue1',
        subkey2 => 'subvalue2'
    },
    key3 => ['value3', 'value4']
);

# 访问嵌套的哈希和数组
my $subvalue1 = $hash1{key2}{subkey1};
my $array_value3 = $hash1{key3}[0];
哈希的其他用途

Perl 中的 CGI 模块中有一个 param 函数,用于接收 HTTP 请求的参数。当参数名出现多次时,它们被当作一个数组或哈希,取决于上下文。例如:

use CGI;

my $cgi = CGI->new;
my $param = $cgi->param('search');  # 假设有三个 search 参数

# 如果 $param 是标量,表示参数只出现了一次
if (!ref $param) {
    process_scalar($param);
}
# 如果 $param 是数组,则参数出现多次,需要遍历
elsif (ref $param eq 'ARRAY') {
    foreach my $value (@$param) {
        process_scalar($value);
    }
}
# 如果 $param 是哈希,则参数用了数组下标或者键名
elsif (ref $param eq 'HASH') {
    foreach my $key (keys %$param) {
        process_scalar($param->{$key});
    }
}

以上就是关于 Perl 哈希的介绍,哈希是 Perl 中非常强大和灵活的数据结构,可以应用于众多场景。