Perl学习笔记

1.单引号和双引号

#!/usr/bin/perl
print "Hello, world
"; # 双引号
print 'Hello, world
'; # 单引号

 结果:

Hello, world
Hello, world

也就是可以看出,双引号会解析 转义字符和变量,而单引号不会。 

2.字符串(Here文档)

#!/usr/bin/perl
$a = 10;
$var = <<"EOF";
这是一个 Here 文档实例,使用双引号。
可以在这输如字符串和变量。
例如:a = $a
EOF
print "$var
";
$var = <<'EOF';
这是一个 Here 文档实例,使用单引号。
例如:a = $a
EOF
print "$var
";

输出:

这是一个 Here 文档实例,使用双引号。
可以在这输如字符串和变量。
例如:a = 10

这是一个 Here 文档实例,使用单引号。
例如:a = $a

1.$a用来定义标量,

2.在定义字符串时,要使用一个EOF或者其他任何样式的字母,并且加上<<,最后一行结束时还要有同样的字串作为结束,并且如果是双引号,就会解析其中的变量,单引号不解析变量。

3.数据类型

Perl是弱类型的语言,变量不需要指定类型。

1.标量:可以是数字、字符串、浮点数:$myfirst=123;  #数字123

2.数组:以0开头,@arr=(1,2,3)

3.哈希:%h=('a'=>1,'b'=>2);  无序的key/value集,以%开头。

4.变量上下文

#!/usr/bin/perl
@names = ('google', 'runoob', 'taobao');
@copy = @names; # 复制数组
$size = @names; # 数组赋值给标量,返回数组元素个数
print "名字为 : @copy
";
print "名字数为 : $size
";

输出:

名字为 : google runoob taobao
名字数为 : 3

上下文是由表达式左边的变量类型决定的,=左边是标量/列表,则是标量/列表上下文,

5.特殊字符

#!/usr/bin/perl
print "文件名 ". __FILE__ . "
";
print "行号 " . __LINE__ ."
";
print "包名 " . __PACKAGE__ ."
";
# 无法解析
print "__FILE__ __LINE__ __PACKAGE__
";

结果:

文件名 E:/MymyEclipse_workSpace/Test002/perl.pl
行号 3
包名 main
__FILE__ __LINE__ __PACKAGE__

其中分别是指文件名、行号、包名。这些特殊字符不能出现在字符串中。

6.建立和访问数组

@array=(1,2,3);
$array[0]=9;
print "$array[0]";

建立就是很正常地建立,访问使用$+元素位置就可以了,和python一样,-1表示最后一个,并且-2以此类推。

#!/usr/bin/perl
@var_10 = (1..10);
@var_20 = (10..20);
@var_abc = (a..z);
print "@var_10
"; # 输出 1 到 10
print "@var_20
"; # 输出 10 到 20
print "@var_abc
"; # 输出 a 到 z

提供了:起始值..结束值 来创建数组,和SNL挺像啊。

数组大小可以由 标量上下文决定。

7.对数组的操作

#!/usr/bin/perl
# 创建一个简单是数组
@sites = ("google","runoob","taobao");
print "1. @sites = @sites
";
# 在数组结尾添加一个元素
push(@sites, "baidu");
print "2. @sites = @sites
";
# 在数组开头添加一个元素
unshift(@sites, "weibo");
print "3. @sites = @sites
";
# 删除数组末尾的元素
pop(@sites);
print "4. @sites = @sites
";
# 移除数组开头的元素
shift(@sites);
print "5. @sites = @sites
";

这个例子很不错了,清晰明了。首先是对数组的输出是最基本的,直接输出定义就可以。

push(@数组名,“添加元素”)/unshift(@数组名,“添加元素”)/pop(@数组名)/shift(@数组名)


#!/usr/bin/perl
@sites = qw/google taobao runoob weibo qq facebook 网易/;
@sites2 = @sites[3,4,5];
print "@sites2
";

这个例子给出了创建数组的另一种方法,就是使用qw然后是/元素1 元素2 /;  元素之间使用空格隔开。

对元素进行分割,切割后赋值给一个新的数组,当然也可以使用像创建数组时的 ..,来表示一个范围。


#!/usr/bin/perl
@nums = (1..20);
print "替换前 - @nums
";
splice(@nums, 5, 5, 21..25);
print "替换后 - @nums
";

结果:

替换前 - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
替换后 - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20

对数组元素进行替换使用splice函数,其中参数分别是就是@数组名、替换起始下标,替换元素个数,替换为的序列。

例子中就是从下标为5,的5个数分别替换为21-25.


#!/usr/bin/perl
# 定义字符串
$var_test = "runoob";
$var_string = "www-runoob-com";
$var_names = "google,taobao,runoob,weibo";
# 字符串转为数组
@test = split('', $var_test);
@string = split('-', $var_string);
@names = split(',', $var_names);
print "$test[3]
"; # 输出 o
print "$string[2]
"; # 输出 com
print "$names[3]
"; # 输出 weibo

这个演示的就是如何将字符串转换为数组,使用split函数,第一个参数是分隔符,第二个就是$字符串。

那么如何将数组转换为字符串呢?使用join函数即可,参数是类似的,第二个参数是@字符串。

#!/usr/bin/perl
# 定义字符串
$var_string = "www-runoob-com";
$var_names = "google,taobao,runoob,weibo";
# 字符串转为数组
@string = split('-', $var_string);
@names = split(',', $var_names);
# 数组转为字符串
$string1 = join( '-', @string );
$string2 = join( ',', @names );
print "$string1
";
print "$string2
";

#!/usr/bin/perl
# 定义数组
@sites = qw(google taobao runoob facebook);
print "排序前: @sites
";
# 对数组进行排序
@sites = sort(@sites);
print "排序后: @sites
";

使用sort函数进行对数组的排序,是根据ascii值来排序的,所以大小写对其是有影响的。


#!/usr/bin/perl
@odd = (1,3,5);
@even = (2, 4, 6);
@numbers = (@odd, @even);
print "numbers = @numbers
";

可以合并数组,在参数里放2个数组即可。

#!/usr/bin/perl
@list = (5,4,3,2,1)[1..3];
print "list 的值 = @list
";

在建立数组的时候,可以在后面加上一个范围,表示读取指定范围的元素:

list 的值 = 4 3 2

//感觉这个功能可以的,有点奇怪。

8.创建哈希的3种方法

#!/usr/bin/perl
%data = ('google', 'google.com', 'runoob', 'runoob.com', 'taobao', 'taobao.com');
%data1 = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
%data2 = (-google=>'google.com', -runoob=>'runoob.com', -taobao=>'taobao.com');
print "$data{'google'}
";
print "$data1{'runoob'}
";
print "$data2{-google}
";

1.直接是第一个元素是key,第二个元素是value。这是默认的。

2.使用=>来确定key和value。

3.使用-和=>来确定key和value,这种key是不能有空格的。

4.注意print没有括号,还有访问hash元素不是[]而是{}!!!而且只能使用key来访问,//这个好像在语言里都是通过这个访问的。

#!/uer/bin/perl
%data = (-taobao => 45, -google => 30, -runoob => 40);
@array = @data{-taobao, -runoob};
print "Array : @array
";

读取哈希值到数组,使用@哈希数组名{key1,key2}这样子。

#!/usr/bin/perl 
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
@names = keys %data;
print "$names[0]
";
print "$names[1]
";
print "$names[2]
";

使用keys %哈希名,可以获取哈希数组中所有的关键字!并且存到一个数组里!厉害了!

那么同样的道理,获取所有的value,就是values %哈希数组名了。

#!/usr/bin/perl
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
if( exists($data{'facebook'} ) ){
print "facebook 的网址为 $data{'facebook'} 
";
}
else
{
print "facebook 键不存在
";
}

判断某一元素是否存在,使用exists函数($data{'测试值'}),

#!/usr/bin/perl
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
@keys = keys %data;
$size = @keys;
print "1 - 哈希大小: $size
";
@values = values %data;
$size = @values;
print "2 - 哈希大小: $size
";

如何获取哈希数组的大小呢?通过获取keys或者values即可。

根据上下文来获取keys数组的大小,还是比较简单的。

#!/usr/bin/perl
$data{'facebook'} = 'facebook.com';
# 删除哈希中的元素
delete $data{'taobao'};

向哈希中添加元素直接添加就可以了,好像所有的编程语言都是这样的;删除哈希中的元素,使用delete $哈希数组名{'关键字'}。

 9.

原文地址:https://www.cnblogs.com/BlueBlueSea/p/9700593.html