ameimeng 发表于 2018-8-31 13:19:40

perl map,seek,read

  http://blog.chinaunix.net/space.php?uid=24504673&do=blog&id=91555map:Perl里面的map,是一种道具,可以让你的函数或者表达式,很方便地施用到一系列对象上去。  1. 让我们先看map的语法
  map BLOCK LIST
  map EXPR, LIST
  BLOCK是一个用{}包围的代码块。EXPR可以是子函数名、正则表达式等。LIST是输入列表。
  简单地说,map就是起了一个替代foreach循环的 作用,map会把数组LIST中的元素挨个取出,放到系统变量$_中,然后调用BLOCK去处理。值得强调的是,除非有很特殊的理由,不要去修改$_的 值,因为修改$_就是直接改了原始数组里的元素!BLOCK 处理过的结果由map返回,仍然是一个数组。
  2. 一个例子:计算一系列文件大小
  my @sizes = map { -s $_ } @filenames;
  上面例子用-s操作取得一些文件的大小,存到数组中去。
  3.是不是说map函数的输入数组和输出数组一定等长呢?不一定的,看这个
  my @books = ( 'Pride and Prejudice', 'Emma', 'MasfieldPark', 'Sense and Sensibility', 'Nothanger Abbey', 'Persuasion', 'LadySusan', 'Sanditon', 'The Watsons');
  现在取出书名里面所有用到的单词,并且全部转换成大写
  my @words = map { split( /\s+/, $_)} @books;
  my@uppercases = map uc, @words;
  在split起过作用之后,当然@words的长度要比@books长了。

[*]#cat a
[*]#!/usr/bin/perl
[*]@list=(0x53,0x77,0x65,0x64,0x65,0x6e,012);
[*]@words =map chr,@list;
[*]print @words;
[*]#./a
[*]Sweden

http://bbs.chinaunix.net/viewthread.php?tid=632333#(兰 花仙子的简简单单讲map)read 函数格式:read (filehand, $var, $length, $offset)filehand:文件句柄$var:存放读取到的字符$length:读取字节数$offset:第四个参数很关键,可是是正正数也可以是 负整数。$offset 只和 $var 相关,可以这么理解: 首先将 $var 截短为 $offset 长的字符串,如果不足就补\0;然后$var .= "读到的内容"正数表示保留的字节数,负数表示截去的字节数,都是从右边往左边截。

[*]#more test
[*]0123456789
[*]#cat a
[*]#!/usr/bin/perl -w
[*]open FH, "
页: [1]
查看完整版本: perl map,seek,read