Perl学习基本备忘录

1.Perl数组(1):

1) 初始化数组 @array = ( "stringA" , "stringB" , "stringC" );
2) 使用负索引循环检索 print $array[-1];  #输出索引为(-1 + 3) % 3 = 2 的 stringC
3) 动态增长 $array[4] = "stringD"; #虽然$array[3]还没有使用,但在动态赋值$array[4]的使用,已经对$array[3]赋空置
4) 动态增长后的负索引 print $array[-1]; #输出索引为(-1 + 5) % 5 = 4 的 stringD
5) print @array; #输出数组中所有值的无空格串接
6) print "@array"; #输出数组中所有值的空格分隔列表

2.Perl数组(2):

1) 数组中可以保存不同类型的数据(字符串、数值、数组)
2) $size = @array; 该语句把数组@array的数组长度值给标量$size,但如果在某些函数中直接使用@array,将不一定能得到数组长度
3) $#arrayname,该特殊变量保存着名为arrayname的数组的末尾索引值。
例如:  @arr = ( 1,2,3,4,5 );
则$#arr的值为4
$#arr=2;  这样就把数组arr截断,其元素4和5都被释放,数组长度值也被改变
4) @array[-1,4,7] 将分别输出索引值为-1,4,7的元素,这样的调用返回值不是标量,而是数组
5) 多维数组使用多层方括号定义
@D3array = (
[ [1,2,3,4] , [5,6,7] , [8,9,0] ],
[ [ 'str1' , 'str2' , 'str3' ] , [345 , 67 , 8930] ],
[ [ 4,6,7] , [2] , [ "sud" ] ]
);

多维数组中每维的数组长度不需要一致,内部数据元素也不需要一致。
获取第一维的数组长度方式是 $size = @array;
第二维         $size = @{$array[$i]};
第三维         $size = @{$array[$i][$j]};
.......         ......
关键是,只要@符号后跟一个数组变量时,就可以获取其长度,但超过一维时,获取数组变量的表达式要用{}包住

3.命令行执行Perl语句

1)perl -e '命令语句'   这样可以直接在命令行执行Perl语句,不过要注意引号匹配规则。
2)perl -ne '命令语句'  filename 这样可以逐行读入filename中的数据,然后对每行都以命令语句处理。
例如 a) perl -ne 'print;'  abc.txt
在命令行界面逐行输出abc.txt文件的数据
b) perl -ne 'print if /^192/ ' /etc/hosts > ~/hosts.tmp
把UNIX like系统中主机解释文件的内容逐条写到~/hosts.tmp文件下,不过只有符合以192开头的行,才会被写入,因为语句会执行筛选

3)'OS命令' | perl -ne '命令语句'  这样可以把之前执行的OS命令的输出作为输入流,重定向到后面执行的perl命令中。
例如 a) ls -al | perl -ne 'print;'
把当前目录下所有子文件、子目录列出,并作为输入数据输入到perl命令中,再逐条打印

4.Perl引号规则

1)双引号中的内容允许转义和变量解析,缩写是qq/内容/
2)单引号中的任何字符都不会被转义和变量不会被解析,缩写是q/内容/
3)反引号中的内容如果出现OS命令,该命令会被执行,并且结果数组会替换命令位置,或作为赋值的数据,缩写是qx/内容/
4)上述缩写中,符号对/内容/可以用其他符号替代,效果相同,例如qq(内容),qx!内容!,q+内容+等等,但字母好像不可以

5.here文档规则

1)起始标签没有使用任何引号。对文档内容的效果等同于使用了双引号。
2)起始标签使用了单引号。对文档内容的效果等同于使用了单引号。
3)起始标签使用了反引号。对文档内容的效果等同于使用了反引号。

6.变量初始化

Perl中的变量在第一次出现时被分配内存。如果没有显式初始化,则会被赋值为0或者空字符串,具体怎样表现要视乎该变量出现的上下文。
使用defined函数,defined $var 可以检查变量是否已经被初始化。
使用undef函数,undef $var 可以释放变量的内容。

7.特殊变量

1)$_, 该变量的值经常作为默认参数值,例如这样调用 print; 不给予任何参数,则会打印出$_的值;当使用文件句柄读入数据时,若不指定使用什么变量保存读入数据,也会读入到$_中。

8.Hash
1)Hash表定义语法:
 %aHash = (
  'key1'  => "value1",
  "key2" => 'value2',
    "key3" => 123,
    456 => "890"
) ;

2)Hash表中的键值可以是数字、字符串、数组甚至另一个hash表,不过如果要采用非字符串键值,则最好以单个键/值对赋值的形式插入到hash表中,而不是在初始化时插入。

3)对1)中的hash表,可以使用以下操作使用hash slice:

代码如下:

a) @aValues = qw ( 123 456 789 0 );
@aHash{'newKey1' , 'newKey2' , 'newKey3' , 'newKey4'} = @aValues;

通过这样的方式,可以创建新的hash表,如果名字相同(除了起始的%变为@),则会在原有的hash表中插入,而非创建。

b)对3)中修改后的aHash,可以采用以下方式获取其值集合的子集:


代码如下:

@subSet = @aHash{ 'newKey1' , 'key1' , 456 };

@subSet数组中保存元素的顺序为赋值时指定键的顺序。
其中 @hash表名 这种使用方式,称为hash slice。

9.数组HASH嵌套

代码如下:

%aHash = (
   "key1" => "value1",
   "key2" => [
         "str1",[ 1,2,3,4,5 ],
     {
              "key2.1" => "value2.1";
              "key2.2" => "value2.2";
     }
         ],
       "key3" => {
             "key3.1" => "value3.1",
             "key3.2" => "value3.2",
        },
);
print "$aHash{'key2'}->[1][3]\n" ; 输出4
print "$aHash{'key2'}->[2]->{'key2.1'}\n"; 输出value2.1
print "$aHash{'key3'}->{'key3.2'}\n"; 输出value3.2

上述调用中->符号可以省略。

10.操作符上下文
1)当操作符的上下文是数值时,操作数中的开头空格会被跳过,直接找到操作数中第一个数字,而随后的字符串也会被跳过。若操作数的起始字符串不是空格也不是数字,则该操作数被解析为0。一个例外是当操作数的形式为科学记数格式时,会被作为一个整体解释。

代码如下:

$str1 = "  5  594asd";
$str2 = "10";
$str3 = "asd 10";
$str4 = "  4e3 asiddfi";
$sum = $str1 + $str2 + $str3 + $str4;  # $sum的值为4015 , 5 + 10 + 0 + 4000

2)当操作符的上下文是字符串时,所有操作数都被解析成字符串。

11.逻辑操作符解析
Perl的各个逻辑操作符都可以理解成短路的,即一旦得出有效结果,就不会继续解析后面的表达式;并且返回最后一个解析的逻辑表达式的解析值,除了异或运算符。

(0)

相关推荐

  • Perl学习基本备忘录

    1.Perl数组(1): 1) 初始化数组 @array = ( "stringA" , "stringB" , "stringC" );2) 使用负索引循环检索 print $array[-1];  #输出索引为(-1 + 3) % 3 = 2 的 stringC3) 动态增长 $array[4] = "stringD"; #虽然$array[3]还没有使用,但在动态赋值$array[4]的使用,已经对$array[3]赋空

  • Perl学习教程之单行命令详解

    前言 本文主要给大家介绍了关于Perl单行命令的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 与One-Liner相关的perl参数 -a 自动分隔模式,用空格分隔$并保存在@F中,也就是@F=split //, $ -F 指定-a的分隔符 -l 对输入的内容进行自动chomp,对输出的内容自动加换行符 -n 相当于while(<>) -e 执行命令,也就是脚本 -p 自动循环+输出,也就是while(<>){命令(脚本); print;} 记住以上几

  • Perl学习笔记之文件操作

    Perl对文件的操作,跟其它的语言类似,无非也就是打开,读与写的操作. 1. 打开文件 #! c:/perl/bin/perl -w use utf8; use strict; use warnings; my $filename = 'test.txt'; # 或者用绝对路径,如: c:/perl/Learn/test.txt if(open(MYFILE,$filename)) # MYFILE是一个标志 { printf "Can open this file:%s!", $fi

  • Perl学习笔记之CPAN使用介绍

    CPAN(Comprehensive Perl Archive Network:全面的Perl存档网络)是查找任何Perl有关的东西的中心仓库.它包含从整个Perl社区收集来的智慧:成百上千的 Perl模块和脚本,相当于好几本书的文档,以及整个Perl发布.如果有东西是用Perl写的,而且这个东西很有用而且是自由的,那么它很有可能就在CPAN上.CPAN在全世界都有镜象,你可以在位于http://www.perl.com/CPAN 的CPAN 路牌上找到离你最近的镜象.那块路牌会记住你选择的是哪

  • Perl 字符串处理备忘录

    1. chop和chomp函数 两个函数都以字符串作为参数,并去除其末尾最后一个字符.区别是,无论最后一个字符是什么,chop都会去除,并在返回值中返回:而仅当字符串最后一个字符与特殊变量$/保存的字符一样时,chomp才会将其去除.默认情况下$/保存换行字符,当然可以重设. 1)如果函数参数是一个字符串数组,那么函数会分别对数组中的每个元素调用. 2)如果函数参数是一个符合列表(即列表中还有其他列表或HASH表),则可以认为保存在参数列表中的是每个复合容器的地址(指针),而此时chop会将地址

  • perl 学习资料整理篇第1/4页

    NULL值的判断 $t{type1id} = $$pref{dbh}->selectrow_array("SELECT type1id FROM enq1 WHERE id = 3"); if ( $t{type1id} == 0 ) { print "Type1id is NULL\n"; } ==>不是数值项的话,这个语句有问题.数值项专用. if ( length($t{type1id}) == 0 ) { print "Type1id

  • Perl 哈希Hash用法之入门教程

    一.什么是Perl Hash 哈希是一种数据结构,和数组类似,可以将值存放到其中,或者从中取回值.但是,和数组不同的是,其索引不是数字,而是名字.也就是说,索引(这里,我们将它叫key)不是数字而是任意的唯一的字符串. key可以是任意的字符串,你可以使用任何的字符串作为key,但它们是唯一的.另一种思考hash 的方法是,把它看作一堆数据(a barrel of data),每一个数据都有一个相应的标签.可以通过标签访问此标签对应的元素.但其中是没有"第一个"元素的概念的.在数组中,

  • Perl数组排序学习笔记

    本文我们学习如何用Perl对字符串或者数字数组进行排序. Perl有个内置函数叫做sort毫无疑问的可以排序一个数组. 其最简单的形式是传递一个数组,它会返回排序后的元素组成的数组.@sorted = sort @original. 基于ASCII码排序 复制代码 代码如下: #!/usr/bin/perl use strict; use warnings; use 5.010;   use Data::Dumper qw(Dumper);   my @words = qw(foo bar zo

  • 学习php设计模式 php实现备忘录模式(Memento)

    一.意图 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样可以在以后把该对象的状态恢复到之前保存的状态. 二.备忘录模式结构图 三.备忘录模式中主要角色 1.备忘录(Memento)角色: 存储发起人(Originator)对象的内部状态,而发起人根据需要决定备忘录存储发起人的哪些内部状态. 备忘录可以保护其内容不被发起人(Originator)对象之外的任何对象所读取. 2.发起人(Originator)角色: 创建一个含有当前的内部状态的备忘录对象 使用备忘录

  • Perl图形化包管理工具PPM学习使用笔记

    PPM(Programmer's Package Manager)是ActivePerl自带的一个图形化管理工具,有了这个工具,要升级,更新,移除Perl的Package都非常方便.只需要输入ppm 或者 ppm gui就可以打开图形界面.毕竟用cpanm来安装的话,你也必须知道要安装的模块名,不是很方便,查询起来也麻烦,要上cpan专门的网页去查. 复制代码 代码如下: C:\>ppm 或者 复制代码 代码如下: C:\>ppm gui 横向的菜单说明如下: 可以使用过滤器来筛选: 可以查看

随机推荐