<一> 语句及注释:

Perl 语句以分号(;)结尾,用 # 作为一行的注释,没有其它语言中那种跨行的注释。代码块用大括号围起来,这个和 C 类似,但这个大括号在有些地方是强制要求,如在 if ,for,do, while 等语句中,它不像其它语言一样会用缩进来判断块。

<二> 变量: 标量(scalar) & 列表(list)

Perl把简单的数据类型,如字符串,数字等“单数”的东西统称为标量,与之相对的,就是“复数”的东西,如数组。标量的声明都是 $ 开始,如:  $str = "abc"。多个标量也可以放一处一起声明:

($x, $y, $z) = (11, 22, "no");

而数组的声明则是以@开头,如:@arr = ("abc","edf")。变量的声明和很多其它脚本语言一样,不需要指明类型,直接声明赋值就可以使用。如果只声明但不赋值,Perl 会默认给它赋值为:undef。

为了检查一个变量是否已被赋值,Perl 提供了一个操作符:defined,用于判断一个变量是否已经被赋值:

if( !defined( $myvar ) )

{

print "uninitialized variable";

}

<三> 字符串

(1) 基本语法

在 Perl 中,所有字符串都是双引号或单引号括起来的,如: "string"  'string'。这两种方式在很多时候相同,不同的是当字符串出现其它变量或转义符号的时候,双引号会将变量的内容展开,而单引号的不会,这和 shell script 是相似的,如:

$var = 234;

$str1 = "str1:$var";    # 打印出来得到-> str1:234

$str2 = 'str2:$var';     # 打印出来得到-> str2:$var

(2) 字符串拼接

点号(.)用于把字符串进行拼接,这个和其它一些语言直接把字符串连在一起就行不一样,要用点号把字符串连起来,如:

$str = "abc"."efg";  # abcefg

这个用法,和 shell script , vim script 也是一致的。

(3) 比较

这里需要强调的,字符串的比较要用:

  • lt    小于 
  • gt   大于 
  • eq   等于

而不要用== , >=  , <= ,这些符号是用来比较数值类型的。

<四> 数组

(1) 声明

如前所说,数组是一个复数(plaural)形式的变量,它的声明是以@开头的,后面跟着小括号放入初始值:

@arr = (12,34,56);

同一个数组里的元素类型不一定要一样,下面的写法也是合法的:

@arr = (12,"abc",'c');

当然,也可以声明空数组:

@arr = ();

声明字符串数组时,可以用 q,qq,qw 系列操作符简化操作。q 代表 quoted,  qw 代表: quoted word.

@arr = qq(abc);   # 等价于 ("abc")

@arr = qw(abc ef gg);   # 等价于("abc","ef","gg")

@arr = q(abc);    # 等价于('abc')

由上看出 qq 与 qw 的区别就在于,qq 是将括号中的整个内容当成一个整体加上双引号,而 qw 是以空格为分隔,如上第二个例子,abc, ef, gg 分别被加上了双引号,而 q 与 qq 相似。这几个操作符的好处在于,当你想在字符串加入转义符号,引号等符号时,会方便很多。

qq(\abc)  eq  “\\abc"

qq("abc") eq ”\"abc\""

(2) 数组访问,插入

如果想访问数组里的元素,就用中括号加下标的方法,和很多其它语言一样,perl的数组元素从0开始算:

print $arr[2];

有人可能注意到了,引用里面元素的时候,又用了$,而不是@。这里其实有一个原则,用@时,是表示整个数组,而引用其中的元素时,就用 $,后面将讲到hash类型数组,也是同样的原则。上面是一次访问一个元素,如果需要取出 sub array(切片), 则应如下写:

@sub_arr = @arr[1,4];

Perl 中的数组是没有指定大小的,如果访问了没有定义的元素,就会返回 undef:

@arr = (1,2,3);

$ele = $arr[20]; # ele == undef

如果要往数组中加入新元素,也可以直接用中括号+下标:

$arr[4] = 4; #如果不存在第4个元素就插入,存在就覆盖。

(3) 转换

下面提一个很体现 Perl 风格的问题,前面说到,用@引用 一个数组时,表示对整个数组的引用,但这种引用在不同场合下(context)是表示不同含义的:

@arr = ("abc", "ed");

print "arr: @arr" ;

上面的 print 会将 arr 中的元素一个个的提取出来展开打印,这个好理解,但如果我这样写呢:

$sz = @arr;  #

把数组赋值给一个标量,Perl 会把数组的大小赋值给左边的变量,所以上面的例子里,$sz 等于2。如果Perl没法判断,当前上下文是标量还是数组,默认情况下,@arr 都会展开数组:

@arr2 = (1,2,@arr);  # arr2 == (1,2,"abc","ed").

但如果这时候,我是想让 @arr 当作标量来处理,怎么办?上面的写法是不行的。Perl 规定,如果想要指明转换为标量类型,就需要加上关键字: scalar.

@arr2 = (1,2,scalar @arr);  # arr2 == (1,2,2)

(4) sort 排序功能

Perl 为数组提供了排序操作符:sort。默认情况下,sort 对数组里的元素按字母排序,然后返回一个新的数组,旧数组不变。

@arr = ("abc","rsz","ef");

@newarr = sort(@arr);

#  arr = abc rsz ef    newarr = abc ef rsz.

如果数组里存的不是字符,或你不想按字符序排序, 可以指定按数字的方式排序。

sort ({$a <=> $b} @array)

大括号表示一个比较函数,<=> 是指数值比较,$a 和 $b 表示比较的两个数,这两个变量是语言预定义的变量不可以更改。如果把a,b的顺序调换一下,就表示反过来排序,如果用了数值排序,而数组中又有字符串元素,那字符串都被当作 0,如果有多个字符串,字符串之间仍按字母序来排序。如:

@arr = (22,44,33,-12,gg ,hh)

sort({$a<=>$b @arr);  #   结果:-12 gg hh 22 33 44

(5) 插入,删除。

Perl 提供了 push, pop, shift, unshift 等函数对数组进行入栈出栈之类的操作。push 和 pop 作用在尾部,shift 与 unshift 作用在头部。

@arr = ("ab","bc","ee");

pop @arr;   # 结果:("ab","bc")

push(@arr,"hh");  #结果: ("ab","bc","hh")

shift @arr;   #结果:  ("bc","hh")

unshift(@arr, "vv"); #结果: ("vv","bc","hh")

<五> hash 数组

(1) 声明与初化

Perl 里的 hash 数组类似于 python 里的 dict, c++ 中的 map。数组中保存的是 <key,value> 一对值。hash 数组用 % 来声明:

%hash = ("key1","value1","key2","value2");

print "v1:$hash{key1}";  #打印出:value1.

上面的初始化语句在 key,value 很多时可读性很差,因此,Perl 又提供了另一种写法:

%hash = ("key1"=>"value1","key2"=>"value2");

其中符号 => 与逗号的效果是完全一样,但这种写法看起来,就比较容易分辨别哪个是 Key, 哪个是 value.

(2) 插入,删除与修改

hash 的插入与修改在语法上是完全一样的。

$hash{"key"} = "value";

如果 hash 数组中原来没有 “key”,就插入;如果有"key"及相应"value",如果原来有相应的 "key",就修改相应的 value 为新的 “value"。与此同时,Perl 提供了一个 delete 操作符来删除 hash 中的元素,如: delete $hash{"key"};

(3) 获取 key 与 value.

Perl 提供了keys 和 values 这两个函数来获取 hash 中的全部 key,value。这两个操作符返回的是一个数组,如:

%hash = ("k1"=>"v1","k2"=>"v2");

@k = keys (%hash);    #k == ("k1","k2")

@v = values(%hash);   #v == ("v1","v2")

REF:

http://www.cnblogs.com/catch/archive/2013/05/25/3096963.html

https://wenku.baidu.com/view/72373031e45c3b3567ec8bd1.html

perl 入门知识(1)的更多相关文章

  1. perl入门知识(3)

    引用       在很多场合下使用引用传值,能在很大程度上提高代码的运行效率.       定义一个引用在变量名前加”\”就可以了,如:       $ra=\$a;       $rb=\@b;   ...

  2. perl入门知识(2)

    交互式编程你可以在命令行中使用 -e 选项来输入语句来执行代码,实例如下:$ perl -e 'print "Hello World\n"'输入以上命令,回车后,输出结果为:Hel ...

  3. Python基础入门知识

    本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...

  4. [置顶] Mysql存储过程入门知识

    Mysql存储过程入门知识 #1,查看数据库所有的存储过程名 #--这个语句被用来移除一个存储程序.不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 #SELECT NAME FROM ...

  5. 移动H5开发入门知识,CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  6. H5移动端开发入门知识以及CSS的单位汇总与用法

    说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了.然后随着手机的流行,web app和hybrid a ...

  7. Java web 入门知识 及HTTP协议详解

     Java  web  入门知识 及HTTP协议详解 WEB入门 WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. Internet上供外界访问的Web资 ...

  8. Java基础入门知识

    Java编程入门知识   知识概要: (1)Java入门基本常识 (2)Java的特性跨平台性 (3)Java的编程环境的搭建 (4)Java的运行机制 (5)第一个Java小程序入门 (1)Java ...

  9. zabbix入门知识

    zabbix入门知识 zabbix中文手册 https://www.zabbix.com/documentation/3.4/manual/ 1.zabbix介绍 Zabbix 是一个企业级的分布式开 ...

随机推荐

  1. epoll详细工作原理(转)

    原文:没有找到出处 开发高性能网络程序时,windows开发者们言必称iocp,linux开发者们则言必称epoll.大家都明白epoll是一种IO多路复用技术,可以非常高效的处理数以百万计的sock ...

  2. npm的用户名添加不上的原因

    npm添加不上的错误e401 1.用cnpm提交,会提交的tao.org这个域名了,用npm提交试试 2.如果npm提交不上,那就查看配置文件配置中 registry=http://registry. ...

  3. UVA 11136 Hoax or what (multiset)

    题目大意: 超时进行促销.把账单放入一个箱子里 每次拿取数额最大的和最小的,给出 最大-最小  的钱. 问n天总共要给出多少钱. 思路分析: multiset 上直接进行模拟 注意要使用long lo ...

  4. 从MySQL开发规范处看创业

    版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/n88Lpo/article/details/78099185 作者:唐勇.深圳市环球易购.MySQL ...

  5. vue学习之五生命周期

    一.vue生命周期图解 下图展示了实例的生命周期.你不需要立马弄明白所有的东西,不过随着你的不断学习和使用,它的参考价值会越来越高. 二.vue钩子函数使用 2.1beforeCreate 在实例初始 ...

  6. jenkins 项目发布脚本

    构建shell #!/bin/bash ########################################################################## 编译部分 ...

  7. Centos 6.5安装OpenSSL

    方法一.直接安装 yum install openssl 方法二.下载源码编译安装 1.下载 wget https://www.openssl.org/source/openssl-1.0.2h.ta ...

  8. java selenium webdriver处理JS操作窗口滚动条

    未经作者允许,禁止转载!!! java selenium webdriver处理JS操作窗口滚动条 java selenium webdriver处理JS操作窗口滚动条 import org.open ...

  9. Must be between v0 and v15, inclusive解决办法

    invoke-static 改为invoke-static/range

  10. Maven的常用功能

    一.jar包管理(仓库) 最佳实践: 1:排除依赖 pom中依赖了某个第三方API,此API又依赖其它API,有可能出问题.(必须申明排除该第三方依赖) Spring-core又隐式的依赖了commo ...