[perl] Perl切片

我们通常中关注列表当中的某几个单元. 例如, 从一个联系人记录中提取姓名和电话号码,假如每一条记录的格式都是由","分隔的:

姓名,性别,地址,邮编,电话号码。。。

 

当需要提取第一个和第五个字段,可以如此做:

while(<FILE>){

  chomp;

  my @items = split /,/;

  my($name, $num)=($items[0], $items[4]);

  ... #继续其他操作

}

 

但这样有些浪费,因为@items就相当于是一个临时列表,我们可以进一步改善, 引入列表:

my($name, $num)=(split /,/)[0,4];

这样一次切片便成功地对两个标量进行了赋值.

 

切片通常是从列表中读取少量值的最简单办法, 如果从列表中拉出第一个最后一个值,借助下标-1代表最后一个元素的便利:

my($name, $num)=(split /,/)[0,-1];

另外对列表排序,并取出最小值与最大值:

my($first, $last) = (sort @names)[0, -1];

切片的下标顺序可以是任意的, 也可以重复.

my @names = qw{zero one two three four five six seven eight nine};

my @numbers = (@names)[2, 0, 6, 0, 4];

print "Numbers: @numbersn"; #打印: Numbers: two zero six zero four

 

对于数组切片,圆括号不是必需的, 所以前面的例子可以进一步简化:

my @numbers = @names[2, 0, 6, 0, 4];

这里的@符号代表了一组数据,方括号意味着你要检索数据,@符号则意味着获取的是列表, 不像$符号意味着获取单个元素.

所以@names[0,4]与 ($names[0], $names[4])是同样的含义。

 

我们还可以用切片对数组元素进行赋值:

@names[0,4] = ("Rockie", "123456");

也可以对哈希做切片操作, 与数组切片类似, 也是由@符号表示从列表中获取数据, 不同的是哈希是以花括号{}来进行检索数据的.

my %scores = (a => 90, b => 100, c=> 80);

my @theirScores = @scores{qw/a, b, c/};

同时我们还可以对哈希进行赋值操作:

@scores{qw/a, b, c/}=(100, 90, 80);

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值