初识perl简单语法

perl是一个中和了许多语言特点的一个语言,与c语言类似,每个语句就是一个分号;
perl -e 加语句在交互式的情况下来实现代码的执行
perl -e “print ‘Hello world\n’”

在我们的linux的环境下:

#!/usr/bin/perl
 #!/usr/bin/perl
 print("hello world")
 print "Hello, world\n";

注释:

# 单行注释

=cut
注释的内容
=pod
注意的是 =cut 与 =pod只能在行首

单双引号的问题,单引号是原意输出,而双引号能通过$取值。

如 $val = 10
print("\$val is $val")
 能打印出 $val是10的效果。
单引号和双引号
perl 输出字符串可以使用单引号和双引号,如下所示:
实例
#!/usr/bin/perl
 
print "Hello, world\n";    # 双引号
print 'Hello, world\n';    # 单引号

here文档:

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

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

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

perl是一种弱类型的语言,它只有三种数据类型:

常量

常量:一般用$来定义
$val = “你好”

整型:

$val = 100
if ($val+100>101){
	print ("ok man");
}
$var1 = 047;    # 等于十进制的39
$var2 = 0x1f;   # 等于十进制的31

浮点型:

v a l = 101.1 i f ( val = 101.1 if ( val=101.1if(val >99.8)
{
print(“哎呦我去”)
}
字符串:

Perl 语言中常用的一些转义字符如下表所示:

转义字符	含义
\\	反斜线
\'	单引号
\"	双引号
\a	系统响铃
\b	退格
\f	换页符
\n	换行
\r	回车
\t	水平制表符
\v	垂直制表符
\0nn	创建八进制格式的数字
\xnn	创建十六进制格式的数字
\cX	控制字符,x可以是任何字符
\u	强制下一个字符为大写
\l	强制下一个字符为小写
\U	强制将所有字符转换为大写
\L	强制将所有的字符转换为小写
\Q	将到\E为止的非单词(non-word)字符加上反斜线
\E	结束\L、\U、\Q
#!/usr/bin/perl
 
# 换行 \n 位于双引号内,有效
$str = "吴勇你好帅";
print "$str\n";
 
# 换行 \n 位于单引号内,无效
$str = '吴勇你好帅\n';
print "$str\n";
 
# 只有 w 会转换为大写
$str = "\uwuyong";
print "$str\n";
 Wuyong
# 所有的字母都会转换为大写
$str = "\Urunoob";
print "$str\n";
 
# 指定部分会转换为大写 \U \E
$str = "Welcome to \Urunoob\E.com!"; 
print "$str\n";
 
# 将到\E为止的非单词(non-word)字符加上反斜线
$str = "\QWelcome to runoob's family";
print "$str\n";
特殊字符
以下我们将演示 Perl 中特殊字符的应用,如 __FILE__, __LINE__, 和 __PACKAGE__ 分别表示当前执行脚本的文件名,行号,包名。

注意: __ 是两条下划线,__FILE__ 前后各两条下划线。

这些特殊字符是单独的标记,不能写在字符串中,例如:

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

数组

数组与python的列表类似都是有序的存放在内存中的,他的定义方式类似于python的元组的定义的方式
数组一般用@来定义

@arr = (1,2,3)
@array = qw/这是 一个 数组/;
  1. 数组的取值
#!/usr/bin/perl
 @age = (18,20,30)
 print("\$age[0]=$age[0] \n")
 print("\$age[1] = $age[1] \n")

@arrwy = (1..20)
print("$arrwy")
会打印1-20
@string1 = (a..z)
print("$string1")
会打印a-z

数组长度返回的是数组物理大小,而不是元素的个数,我们可以看以下实例:
$#表示数组的长度,@array表示数组的大小
实例

#!/uer/bin/perl
 
@array = (1,2,3);
$array[50] = 4;
 
$size = @array;
$max_index = $#array;
 
print "数组大小:  $size\n";
print "最大索引: $max_index\n";

添加和删除数组元素


序号	类型和描述
1	push @ARRAY, LIST
将列表的值放到数组的末尾

2	pop @ARRAY
弹出数组最后一个值,并返回它

3	shift @ARRAY
弹出数组第一个值,并返回它。数组的索引值也依次减一。

4	unshift @ARRAY, LIST
将列表放在数组前面,并返回新数组的元素个数。
#!/usr/bin/perl
 
# 创建一个简单是数组
@sites = ("google","runoob","taobao");
 @arr1 = ("google",'taobao','wuyong')
print "1. \@arr1  = @arr1\n";
 
# 在数组结尾添加一个元素
push(@arr1,"baidu")
print "2. \@arr1  = @arr1\n";
 
# 在数组开头添加一个元素
unshift(@arr1,'360虎牙')
print "3. \@arr1 = @arr1\n";
 
# 删除数组末尾的元素
pop(@sites);
print "4. \@arr1  = @arr1\n";
 
# 移除数组开头的元素
shift(@arr1);
print "5. \@arr1  = @arr1\n";
切割数组
我们可以切割一个数组,并返回切割后的新数组:

实例
#!/usr/bin/perl
 
@sites = qw/google taobao runoob weibo qq facebook 网易/;
 
@sites2 = @sites[3,4,5];
 
print "@sites2\n";
执行以上程序,输出结果为:

weibo qq facebook
数组索引需要指定有效的索引值,可以是正数后负数,每个索引值使用逗号隔开。

如果是连续的索引,可以使用 .. 来表示指定范围:

实例
#!/usr/bin/perl
 
@sites = qw/google taobao runoob weibo qq facebook 网易/;
 
@sites2 = @sites[3..5];
 
print "@sites2\n";
执行以上程序,输出结果为:

weibo qq facebook
替换数组元素
Perl 中数组元素替换使用 splice() 函数,语法格式如下:

splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]
参数说明:

@ARRAY:要替换的数组。
OFFSET:起始位置。
LENGTH:替换的元素个数。
LIST:替换元素列表。
以下实例从第6个元素开始替换数组中的5个元素:

实例
#!/usr/bin/perl
 
@nums = (1..20);
print "替换前 - @nums\n";
 
splice(@nums, 5, 5, 21..25); 
print "替换后 - @nums\n";
执行以上程序,输出结果为:

替换前 - 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
将字符串转换为数组
Perl 中将字符串转换为数组使用 split() 函数,语法格式如下:

split [ PATTERN [ , EXPR [ , LIMIT ] ] ]
参数说明:

PATTERN:分隔符,默认为空格。
EXPR:指定字符串数。
LIMIT:如果指定该参数,则返回该数组的元素个数。
实例
#!/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]\n";  # 输出 o
print "$string[2]\n";  # 输出 com
print "$names[3]\n";   # 输出 weibo
执行以上程序,输出结果为:

o
com
weibo
将数组转换为字符串
Perl 中将数组转换为字符串使用 join() 函数,语法格式如下:

join EXPR, LIST
参数说明:

EXPR:连接符。
LIST:列表或数组。
实例
#!/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\n";
print "$string2\n";
执行以上程序,输出结果为:

www-runoob-com
google,taobao,runoob,weibo
数组排序
Perl 中数组排序使用 sort() 函数,语法格式如下:

sort [ SUBROUTINE ] LIST
参数说明:

SUBROUTINE:指定规则。
LIST:列表或数组。
实例
#!/usr/bin/perl
 
# 定义数组
@sites = qw(google taobao runoob facebook);
print "排序前: @sites\n";
 
# 对数组进行排序
@sites = sort(@sites);
print "排序后: @sites\n";
执行以上程序,输出结果为:

排序前: google taobao runoob facebook
排序后: facebook google runoob taobao
注意:数组排序是根据 ASCII 数字值来排序。所以我们在对数组进行排序时最好先将每个元素转换为小写后再排序。

特殊变量: $[
特殊变量 $[ 表示数组的第一索引值,一般都为 0 ,如果我们将 $[ 设置为 1,则数组的第一个索引值即为 1,第二个为 2,以此类推。实例如下:

实例
#!/usr/bin/perl
 
# 定义数组
@sites = qw(google taobao runoob facebook);
print "网站: @sites\n";
 
# 设置数组的第一个索引为 1
$[ = 1;
 
print "\@sites[1]: $sites[1]\n";
print "\@sites[2]: $sites[2]\n";
执行以上程序,输出结果为:

网站: google taobao runoob facebook
@sites[1]: google
@sites[2]: taobao
一般情况我们不建议使用特殊变量 $[,在新版 Perl 中,该变量已废弃。

合并数组
数组的元素是以逗号来分割,我们也可以使用逗号来合并数组,如下所示:

实例
#!/usr/bin/perl
 
@numbers = (1,3,(4,5,6));
 
print "numbers = @numbers\n";
执行以上程序,输出结果为:

numbers = 1 3 4 5 6
也可以在数组中嵌入多个数组,并合并到主数组中:

实例
#!/usr/bin/perl
 
@odd = (1,3,5);
@even = (2, 4, 6);
 
@numbers = (@odd, @even);
 
print "numbers = @numbers\n";
执行以上程序,输出结果为:

numbers = 1 3 5 2 4 6
从列表中选择元素
一个列表可以当作一个数组使用,在列表后指定索引值可以读取指定的元素,如下所示:

实例
#!/usr/bin/perl
 
$var = (5,4,3,2,1)[4];
 
print "var 的值为 = $var\n"
执行以上程序,输出结果为:

var 的值为 = 1
同样我们可以在数组中使用 .. 来读取指定范围的元素:

实例
#!/usr/bin/perl
 
@list = (5,4,3,2,1)[1..3];
 
print "list 的值 = @list\n";
执行以上程序,输出结果为:

list 的值 = 4 3 2

hash类型

一般用%定义:
%hash = (‘name’,‘wuyong’)
一般是成对出现的

Perl 哈希
哈希是 key/value 对的集合。

Perl中哈希变量以百分号 (%) 标记开始。

访问哈希元素格式:${key}。

以下是一个简单的哈希实例:

实例
#!/usr/bin/perl
 
%data = ('google', 'google.com', 'runoob', 'runoob.com', 'taobao', 'taobao.com');
 
print "\$data{'google'} = $data{'google'}\n";
print "\$data{'runoob'} = $data{'runoob'}\n";
print "\$data{'taobao'} = $data{'taobao'}\n";
执行以上程序,输出结果为:



创建哈希
创建哈希可以通过以下两种方式:

一、为每个 key 设置 value
$data{'google'} = 'google.com';
$data{'runoob'} = 'runoob.com';
$data{'taobao'} = 'taobao.com';
二、通过列表设置
列表中第一个元素为 key,第二个为 value。

%data = ('google', 'google.com', 'runoob', 'runoob.com', 'taobao', 'taobao.com');
也可以使用 => 符号来设置 key/value:

%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
以下实例是上面实例的变种,使用 - 来代替引号:

%data = (-google=>'google.com', -runoob=>'runoob.com', -taobao=>'taobao.com');
使用这种方式 key 不能出现空格,读取元素方式为:

$val = $data{-google}
$val = $data{-runoob}
访问哈希元素
访问哈希元素格式:${key},实例如下:

实例
#!/usr/bin/perl
 
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
 
print "\$data{'google'} = $data{'google'}\n";
print "\$data{'runoob'} = $data{'runoob'}\n";
print "\$data{'taobao'} = $data{'taobao'}\n";
执行以上程序,输出结果为:



读取哈希值
你可以像数组一样从哈希中提取值。

哈希值提取到数组语法格式:@{key1,key2}。

实例
#!/uer/bin/perl
 
 
%data = (-taobao => 45, -google => 30, -runoob => 40);
 
@array = @data{-taobao, -runoob};
 
print "Array : @array\n";
执行以上程序,输出结果为:

Array : 45 40
读取哈希的 key 和 value
读取所有key
我们可以使用 keys 函数读取哈希所有的键,语法格式如下:

keys %HASH
该函数返回所有哈希的所有 key 的数组。

实例
#!/usr/bin/perl 
 
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
 
@names = keys %data;
 
print "$names[0]\n";
print "$names[1]\n";
print "$names[2]\n";
执行以上程序,输出结果为:

taobao
google
runoob
类似的我们可以使用 values 函数来读取哈希所有的值,语法格式如下:

values %HASH
该函数返回所有哈希的所有 value 的数组。

实例
#!/usr/bin/perl 
 
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
 
@urls = values %data;
 
print "$urls[0]\n";
print "$urls[1]\n";
print "$urls[2]\n";
执行以上程序,输出结果为:

taobao.com
runoob.com
google.com
检测元素是否存在
如果你在哈希中读取不存在的 key/value 对 ,会返回 undefined 值,且在执行时会有警告提醒。

为了避免这种情况,我们可以使用 exists 函数来判断key是否存在,存在的时候读取:

实例
#!/usr/bin/perl
 
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
 
if( exists($data{'facebook'} ) ){
   print "facebook 的网址为 $data{'facebook'} \n";
}
else
{
   print "facebook 键不存在\n";
}
执行以上程序,输出结果为:

facebook 键不存在
以上代码中我们使用了 IF...ELSE 语句,在后面的章节我们会具体介绍。

获取哈希大小
哈希大小为元素的个数,我们可以通过先获取 key 或 value 的所有元素数组,再计算数组元素多少来获取哈希的大小,实例如下:

实例
#!/usr/bin/perl
 
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
 
@keys = keys %data;
$size = @keys;
print "1 - 哈希大小: $size\n";
 
@values = values %data;
$size = @values;
print "2 - 哈希大小: $size\n";
执行以上程序,输出结果为:

1 - 哈希大小: 3
2 - 哈希大小: 3
哈希中添加或删除元素
添加 key/value 对可以通过简单的赋值来完成。但是删除哈希元素你需要使用 delete 函数:

实例
#!/usr/bin/perl
 
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
@keys = keys %data;
$size = @keys;
print "1 - 哈希大小: $size\n";
 
# 添加元素
$data{'facebook'} = 'facebook.com';
@keys = keys %data;
$size = @keys;
print "2 - 哈希大小: $size\n";
 
# 删除哈希中的元素
delete $data{'taobao'};
@keys = keys %data;
$size = @keys;
print "3 - 哈希大小: $size\n";
执行以上程序,输出结果为:

1 - 哈希大小: 3
2 - 哈希大小: 4
3 - 哈希大小: 3

未完待续

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值