第二章 集腋成裘
来源:互联网 发布:数据统计权威网站 编辑:程序博客网 时间:2024/04/29 23:18
<pre name="code" class="sql">Perl 的三种基本数据类型是:标量,标量数组和标量散列(hash) 一个散列(hash)数组是一个无序的键字/数值对,你可以用子串(就是键字)当作脚标来访问对应一个键字的标量(就是数值)2.4 变量:标量变量的开头总是$,甚至连引用一个数组或者散列中的一个标量也如此$days 简单标量值 $days$days[28] 数组@days 的第29个元素$day{'Feb'} 散列%days的'Feb'的值${days} 和$days一样,不过在字母数字签名不易混淆$Dog::days 在Dog包里面的不同的$days变量$#days 数组@days的最后一个索引$days->[28] $days 一个引用指向的数组的第29个元素$days[0][2] 多维数组$days{200}{'FEB'} 多维散列2.5 名字我们容易认为名字和标示符是一样的东西,不过,当我们说名字的时候,通常是指其全称,也就是说,表明自己位于哪个符号表的名字。这样的名字可能是一个由标记::分隔的标识符的序列:$Santa::Helper::Reindeer::Rudopph::nose:就像一个路径名里面的目录和文件一样:/Santa/Helper/Reindeer/Rudolph/nose在Perl的那个标识法里面,所有前导的标示符都是嵌套的符号表名字,并且最后一个标识符就是变量所在的最里面的符号表的名字。比如,上面的变量里,符号表的名字是:Santa::Helper::Reindeer::Rudolph::, 而位于此符号表的实际变量是$nosePerl 里的符号表也被称为(package),因此这些变量常被称为包变量。包变量名义上是其所属包的私有成员,但实际上是全局的,因为包本身就是全局的。常量 通用 含义 替换' ' q// 文本子串 否"" qq// 文本子串 是` ` qx// 执行命令 是() qw// 单词数组 否// m// 模式匹配 是s/// s/// 模式替换 是打印出UTF-8的编码的笑脸"\x{263a}"☺zjzc01:/root/big# cat a15.pl print v9786;zjzc01:/root/big# perl a15.pl Wide character in print at a15.pl line 1.☺zjzc01:/root/big# 2.6.8 其他文本记号你应该把任何以双下划线开头和结束的标示符看作由Perl保留做特殊语法处理的记号。其中有两个这类特殊文本是LINE和__FILE__,分别意味着在你的程序某点的当前行号和文件名。它们只能用做独立的记号;它们不嫩被代换位子串。与之类似,__PACKAGE__ 是当前代码所编译进入的包的名字如果没有当前包(因为有一个空的package,指示)__PACKAGE__ 就是未定一致。zjzc01:/root/big# cat a16.pl @files=qw/a b c d e f g/;while (@files){ my $file = shift @files; print "\$file is $file\n";};zjzc01:/root/big# perl a16.pl $file is a$file is b$file is c$file is d$file is e$file is f$file is g不要试图在这里用defined @files,那样没用,因为defined 函数是询问一个标量是否为undef,而一个数组不是标量。简单的布尔值测试就够用了。2.7.3 空(void)环境zjzc01:/root/big# cat a18.pl @stuff=qw/1 2 3 4/;$stuff = @stuff;print "\$stuff is $stuff\n";zjzc01:/root/big# perl a18.pl $stuff is 4当数组处于标量环境时,它只返回数组长度2.8.1 列表赋值:截断一个数组并不回收其内存,你必须undef(@whatever)来把它的内存释放会你的进程的内存池里。你可能无法把它释放回你的系统的内存池,因为几乎没有那种操作系统支持这样做。zjzc01:/root/big# cat a19.pl %map = ( red => oxff0000, green => 0x00ff00, blue => 0x0000ff,);print %map;zjzc01:/root/big# perl a19.pl green65280blue255redoxff0000zjzc01:/root/big# zjzc01:/root/big# cat a19.pl %map = ( red => oxff0000, green => 0x00ff00, blue => 0x0000ff,);print %map;zjzc01:/root/big# perl a19.pl green65280blue255redoxff0000zjzc01:/root/big# 或者初始化任何当作记录使用的匿名散列引用:{} 表示散列引用:zjzc01:/root/big# cat a20.pl $rec = { NAME => 'John Simth', RANK => 'Captain', SERNO => '951413'};print $rec;print "\n";print %$rec;zjzc01:/root/big# perl a20.pl HASH(0x197fd48)NAMEJohn SimthSERNO951413RANKCaptainzjzc01:/root/big# 2.10 型团(typeglob) 和文件句柄Perl 里面有种特殊的类型叫做类型团(typeglob) 泳衣保留整个符号表记录。(符号表记录 *foo 包括$foo,@foo,%foo &foo 和其他几个foo的简单解释值)类型团(typeglob)的类型前缀上一个*,因为它代表所有类型。zjzc01:/root/big# cat a21.pl $foo='a';@foo = qw/1 2 3 4/;%foo = ("a"=>1,"b"=>2,"c"=>3);$fh = *foo;print "\$fh is $$fh\n";print "\$fh is @$fh\n";zjzc01:/root/big# perl a21.pl $fh is a$fh is 1 2 3 4或者:zjzc01:/root/big# cat a21.pl $foo='a';@foo = qw/1 2 3 4/;%foo = ("a"=>1,"b"=>2,"c"=>3);*fh = *foo;print "\$fh is $fh\n";print "\$fh is @fh\n";zjzc01:/root/big# perl a21.pl $fh is a$fh is 1 2 3 4类型团如今的主要用途是把一个符号表取另一个符号表名字做别名,别名就是外号,如果你说:*foo = *bar;那所有叫"foo" 的东西都是每个对应的叫"bar"的同义词,你也可以通过给类型团赋予引用实现只给某一个变量取别名:2.11.2 行输入(尖角)操作符:zjzc01:/root/big# cat a22.pl while (<STDIN>){print "\$_ is $_\n";};2.11.3 文件名聚集操作符:zjzc01:/root/big# cat a23.pl @files = glob("*pl");print @files;zjzc01:/root/big# perl a23.pl a1.pla10.pla11.pla12.pla13.pla14.pl
0 0
- 第二章 集腋成裘
- 聚沙成塔,集腋成裘
- 聚沙成塔,集腋成裘
- <2>集腋成裘
- 上层代码集腋成裘
- 第二章 --- 第二节
- 【第二章 第二节】
- 第二章第二题
- 第二章第二题
- 第二章第二题
- 139. Every little helps a mickle. 聚沙成塔,集腋成裘
- 【集腋成裘】类型判断(instanceof、isInstance、isAssignableFrom、equals)
- 第二章
- 第二章
- 第二章
- 第二章
- 第二章
- 第二章
- 【.Net码农】基于jquery的$.ajax async使用
- 技术人才的出路在哪里
- laravel 分页 说明
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- ZOJ1037-Gridland
- 第二章 集腋成裘
- PHP_EOL
- jquery data的使用方式
- 设置Maven的JVM参数
- IO - 同步,异步,阻塞,非阻塞
- 引用
- 解决Win10下genymotion无法运行的问题。
- mac 终端 root 权限
- netty5源码分析(2)--学习笔记