Perl Note(2)

子程序中局部变量的定义有两种方法:my和local。其区别是:my定义的变量只在该子程序中存在;而local定义的变量不存在于主程序中,但存在于该子程序和该子程序调用的子程序中(在PERL4中没有my)。定义时可以给其赋值,如:
  my($scalar) = 43;

  local(@array) = (1, 2, 3);

调用方法&my_sub(@array)将把数组@array的数据拷贝到子程序中的变量@_中,当数组很大时,将会花费较多的资源和时间,而用别名传递将不做这些工作,而对该数组直接操作。形式如:

  @myarray = (1, 2, 3, 4, 5);

  &my_sub(*myarray);

  sub my_sub {

    my (*subarray) = @_;

  }

此方法类似于C语言中的传递数组的起始地址指针,但并不一样,在定义数组的别名之后,如果有同名的简单变量,则对该变量也是起作用的。

.可用\nnn(8进制)或\xnn(16进制)来表示ASCII字符,如:

  $result = "\377"; # this is the character 255,or EOF

  $result = "\xff"; # this is also 255

文件测试操作符

操作符 描述

-b 是否为块设备

-c 是否为字符设备

-d 是否为目录

-e 是否存在

-f 是否为普通文件

-g 是否设置了setgid位

-k 是否设置了sticky位

-l 是否为符号链接

-o 是否拥有该文件

-p 是否为管道

-r 是否可读

-s 是否非空

-t 是否表示终端

-u 是否设置了setuid位

-w 是否可写

-x 是否可执行

-z 是否为空文件

-A 距上次访问多长时间

-B 是否为二进制文件

-C 距上次访问文件的inode多长时间

-M 距上次修改多长时间

-O 是否只为“真正的用户”所拥有

-R 是否只有“真正的用户”可读

-S 是否为socket

-T 是否为文本文件

-W 是否只有"真正的用户"可写

-X 是否只有"真正的用户"可执行

注:“真正的用户”指登录时指定的userid,与当前进程用户ID相对,命令suid可以改变有效用户ID。


格式 值域含义

@<<< 左对齐输出

@>>> 右对齐输出

@||| 中对齐输出

@##.##   固定精度数字  

@* 多行文本


sub write_to_stdout {

  local ($savefile, $saveformat);

  $savefile = select(STDOUT);

  $saveformat = $~;

  $~ = "MYFORMAT";

  write;

  $~ = $saveformat;

  select($savefile);

}

printf值域

域值   含义

%c 单个字符

%d 十进制整数

%e 科学计数法形式的浮点数  

%f 普通形式(定点)浮点数

%g 紧缩形式浮点数

%o 八进制整数

%s 字符串

%u 无符号整数

%x 十六进制整数

指针

取址符:\

解址:$

哈希表和数组引用元素:->($的另一种形式)

文件句柄的引用:\*LOGHANDLE(用于传递参数)


 

 

posted @ 2008-09-23 16:38  xiaoyixy  阅读(246)  评论(0编辑  收藏  举报