36、Perl 列表与哈希变量的使用

Perl 列表与哈希变量的使用

1. 数组变量的使用

在 Perl 编程中,数组变量的使用有许多值得注意的地方。首先,在某些情况下,需要对表达式进行特殊处理。例如,当第 15 行周围的双引号允许变量插值产生 $fields 的内容后,表达式 ( 1,3..5 ) 必须由 eval 处理,这样才能将 “..” 识别为范围运算符,逗号识别为列表元素分隔符。最终结果就如同 @fields=( 1,3..5 ) 直接出现在第 15 行一样,将所需的索引编号分配给 @fields 数组。

第 18 行检查字段数量,以排除空行后续的处理。 unshift 会将一条特殊消息加载到数组现在非法的第 0 个位置,然后将 @fields 数组的内容插入到下标表达式中作为索引,提取所需的值进行打印。

1.1 fcookie 脚本

在早期的 UNIX 时代,娱乐方式有限,计算机的多媒体功能也很初级。当时,一个名为 fortune 的命令带来了一些乐趣,它能显示类似幸运饼干中的幽默消息。我们可以使用 Perl 脚本来模仿 fortune 程序的行为,甚至做得更好。

在使用脚本之前,需要了解幸运消息在数据文件中的存储方式。以一个关于《星际迷航》妙语的文件为例,每个幸运消息记录都以仅包含 % 符号的行结尾。基于此,编写一个脚本将每个幸运消息加载到数组中,然后随机显示一条。

### Perl变量哈希数组的用法 #### 变量声明赋值 在Perl中,变量分为三种主要类型:标量(scalar)、数组(array)以及哈希(hash)。每种类型的变量都有特定的作用范围和用途。 - **标量**用于存储单个数值或字符串。其前缀符号为`$`。 ```perl my $number = 42; my $string = "Hello, world!"; ``` - **数组**用来保存一系列有序的元素列表数组名之前加上`@`表示整个数组;而当引用数组内的单一成员时,则需改回使用`$`并附带索引位置[^1]。 ```perl my @numbers = (1, 2, 3); print "$numbers[0]\n"; # 输出第一个元素 ``` - **哈希表**, 或者说关联数组,在Perl里通常称为“哈希”。这是一种键/值对集合的数据结构,其中每个唯一的键对应着一个具体的值。定义哈希的时候会在名称前面加 `%`, 访问具体项则同样切换成 `$` 加上对应的键[^2]. ```perl my %person = ( name => 'Alice', age => 30, ); print "$person{name}\n"; ``` #### 创建和操作哈希 为了更好地管理和检索复杂的信息集,可以利用哈希来构建更高级别的数据模型。下面是一个简单的例子展示了怎样初始化一个包含多个字段记录的人类对象,并对其进行基本的操作: ```perl # 定义一个新的哈希 my %employee; # 添加新的键值对到已存在的哈希中 $employee{id} = 1001; $employee{position}= 'Developer'; $employee{salary} = 75_000; foreach my $key (keys %employee){ print "$key : $employee{$key}\n"; } ``` #### 获取哈希大小 要获得哈希内有多少条目,可以通过先取得所有的 keys 或 values 形成的新数组长度来进行间接测量[^3]: ```perl my %fruits = ('apple' => 1, 'banana' => 2); my $size = scalar(keys %fruits); print "Size of hash is: $size\n"; ``` #### 遍历数组哈希 对于遍历数组而言,有两种常见的方式——通过索引来迭代或是直接取出每一个元素进行处理。而对于哈希来说,则更多地涉及到对其内部键值对的同时访问[^4]。 ##### 数组遍历方式之一: ```perl my @colors = qw(red green blue yellow orange purple pink black white gray); for(my $i=0;$i<@colors;$i++){ print "$colors[$i]\n"; } ``` ##### 使用 `each` 函数遍历哈希: ```perl while( my ($k,$v)= each(%person)){ print "$k -> $v \n"; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值