数据类型有:  标量$, 数组@,哈希%

数组声明 :  @hits = (25, 30, 40);  或者  @sites = qw/google taobao runoob/;

数组操作 pop, push, shift, unshif, splice(@ARRAY,OFFSET,LENGTH,LIST),   join, sort

合并数组, @numbers = (@odd, @even);  从列表中选择元素 @list = (5,4,3,2,1)[1..3];

哈希:   %data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');

或者: %data = (-google=>'google.com', -runoob=>'runoob.com', -taobao=>'taobao.com');

判断元素是否存在, exists($data{'facebook'} )

获取元素大小: $size = @keys; , 删除元素 delete $data{'taobao'};  增加元素 $data{'facebook'} = 'facebook.com';

foreach $a (@list) { print "a 的值为: $a\n";  }

运行符: =, +=, *=,%=,等 逻辑运行符  &&, ||, and, or, not, ++, --,  ('-' x 3) 输出为 ---

引号运算: q{abcd} 结果为 'abcd' , qq{abcd} 结果为 "abcd"

格式时间,获得当前时间:   use POSIX qw(strftime);    $datestring = strftime "%Y-%m-%d %H:%M:%S", localtime;

子程序(程序)

sub function { } 调用则是function();

参数:  子程序参数使用特殊数组 @_ 标明。因此子程序第一个参数为 $_[0], 第二个参数为 $_[1], 以此类推。

传递哈希:  当向子程序传递哈希表时,它将复制到 @_ 中,哈希表将被展开为键/值组合的列表。 my (%hash) = @_;   //转成哈希

返回值:  默认最后的值为返回值,  如果没有使用 return 语句,则子程序的最后一行语句将作为返回值

私有变量: my

临时变量 :  local,  我们可以使用 local 为全局变量提供临时的值,在退出作用域后将原来的值还回去

静态变量:  state $count = 0; # 初始化变量,     不过在Perl中想要使用state必须在文件开头加上 use feature qw(state); 或者 use 5.010; 因为state功能是在5.010版本中才开始提供的。

perl引用

$scalarref = \$foo; # 标量变量引用

$arrayref  = \@ARGV;    # 列表的引用
$hashref = \%ENV; # 哈希的引用
$coderef = \&handler; # 子过程引用
$globref = \*foo; # GLOB句柄引用 取消引用可以根据不同的类型使用 $, @ 或 % 来取消 perl格式化输出, 格式语法如下:
format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
. 文件操作
open(DATA, "<file.txt") or die "file.txt 文件无法打开, $!";

while(<DATA>){
print "$_";
}
模式 描述
< 或 r 只读方式打开,将文件指针指向文件头。
> 或 w 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
>> 或 a 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
+< 或 r+ 读写方式打开,将文件指针指向文件头。
+> 或 w+ 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
+>> 或 a+ 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
 删除文件
unlink ("/usr/runoob/test/file1.txt"); 文件重命名
rename ("/usr/runoob/test/file1.txt", "/usr/runoob/test/file2.txt" ); 读入文件
$name = <STDIN>; 
print "网址:$name\n"; 目录操作
# 显示 /tmp 目录下所有以 .c 结尾的文件
$dir = "/tmp/*.c";
@files = glob( $dir ); foreach (@files ){
print $_ . "\n";
}
# 显示 /tmp 和 /home 目录下的所有文件
$dir = "/tmp/* /home/*";
@files = glob( $dir ); foreach (@files ){
print $_ . "\n";
}

错误处理

die 函数类似于 warn, 但它会执行退出。一般用作错误信息的输出:

chdir('/etc') or die "无法切换目录";

warn 函数用于触发一个警告信息,不会有其他操作,输出到 STDERR(标准输出文件),通常用于给用户提示:

chdir('/etc') or warn "无法切换目录";

Carp 模块

在 Perl 脚本中,报告错误的常用方法是使用 warn() 或 die() 函数来报告或产生错误。而对于 Carp 模块,它可以对产生的消息提供额外级别的控制,尤其是在模块内部。

cluck() 与 warn() 类似,提供了从产生错误处的栈回溯追踪。

croak() 与 die() 一样,可以结束脚本。

confess() 与 die() 类似,但提供了从产生错误处的栈回溯追踪。

 

Perl 特殊变量

在迭代循环中,当前循环的字符串会放在 $_ 中, 然后 通过 print 输出。另外 print 在不指定输出变量,默认情况下使用的也是 $_。

$$ 运行当前Perl脚本程序的进程号

Perl 正则表达式

Perl的正则表达式的三种形式,分别是匹配,替换和转化:

  • 匹配:m//(还可以简写为//,略去m)

  • 替换:s///

  • 转化:tr///

这三种形式一般都和 =~ 或 !~ 搭配使用, =~ 表示相匹配,!~ 表示不匹配。

$bar = "I am runoob site. welcome to runoob site.";
if ($bar =~ /run/){
print "第一次匹配\n";
}else{
print "第一次不匹配\n";
} $bar = "run";
if ($bar =~ /run/){
print "第二次匹配\n";
}else{
print "第二次不匹配\n";
}

替换, 例如我们将以下字符串的 "google" 替换为 "runoob": 格式如下:

s/PATTERN/REPLACEMENT/;
$string = "welcome to google site.";
$string =~ s/google/runoob/; print "$string\n";

正则表达式变量

  • $`: 匹配部分的前一部分字符串
  • $&: 匹配的字符串
  • $': 还没有匹配的剩余字符串
$string = "welcome to runoob site.";
$string =~ m/run/;
print "匹配前的字符串: $`\n";
print "匹配的字符串: $&\n";
print "匹配后的字符串: $'\n";

对象的创建和使用

sub new
{
my $class = shift;
my $self = {
_firstName => shift,
_lastName => shift,
_ssn => shift,
};
# 输出用户信息
print "名字:$self->{_firstName}\n";
print "姓氏:$self->{_lastName}\n";
print "编号:$self->{_ssn}\n";
bless $self, $class;
return $self;
}

使用创建的对象

$object = new Person( "小明", "王", );

Perl 里 类方法通过@ISA数组继承,这个数组里面包含其他包(类)的名字,变量的继承必须明确设定。

多继承就是这个@ISA数组包含多个类(包)名字。

Perl 包和模块

从一个包中访问另外一个包的变量,可通过" 包名 + 双冒号( :: ) + 变量名 " 的方式指定。

特殊变量 __PACKAGE__ 用于输出包名:

Perl语言提供了两个关键字:BEGIN,END。它们可以分别包含一组脚本,用于程序体运行前或者运行后的执行。
package Foo;
print "Begin 和 Block 实例\n"; BEGIN {
print "这是 BEGIN 语句块\n"
} END {
print "这是 END 语句块\n"
}

Perl 模块是一个可重复使用的包,模块的名字与包名相同,定义的文件后缀为 .pm

我们注意到 require 引用需要使用包名指定函数,而 use 不需要,二者的主要区别在于:

  • 1、require用于载入module或perl程序(.pm后缀可以省略,但.pl必须有)
  • 2、Perl use语句是编译时引入的,require是运行时引入的
  • 3、Perl use引入模块的同时,也引入了模块的子模块。而require则不能引入,要在重新声明
  • 4、USE是在当前默认的@INC里面去寻找,一旦模块不在@INC中的话,用USE是不可以引入的,但是require可以指定路径
  • 5、USE引用模块时,如果模块名称中包含::双冒号,该双冒号将作为路径分隔符,相当于Unix下的/或者Windows下的\。 如: use MyDirectory::MyModule


特殊变量:

@_获得传得参数的值, $n = scalar(@_);可获得个数。

菜鸟教程perl总结的更多相关文章

  1. C++ Web 编程(菜鸟教程)

    C++ Web 编程(菜鸟教程) C++ Web 编程 什么是 CGI? 公共网关接口(CGI),是一套标准,定义了信息是如何在 Web 服务器和客户端脚本之间进行交换的. CGI 规范目前是由 NC ...

  2. MySQL教程 | 菜鸟教程

    装数据库失败后的重装步骤!!! --[创建数据库]CREATE DATABASE <数据库名>: --使用mysqladamin 创建数据库-- 使用普通用户,你可能需要特定的权限来创建或 ...

  3. 菜鸟教程 Python100例 之实例29

    学习编程的路,走得好艰辛... 为了巩固基础知识,把菜鸟教程网上的实例拿来练习.. 在做到实例29时,看了网站给出的代码,觉得可以加强一下功能,不由得动了一下脑筋,如下: 原文题目: 题目:给一个不多 ...

  4. 【转载】jQuery Validate 菜鸟教程

    文章1:http://www.runoob.com/jquery/jquery-plugin-validate.html          (jQuery Validate 菜鸟教程)

  5. Http状态码大全(来自菜鸟教程)

    HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准. HTTP是一个基于TCP/IP通信 ...

  6. 菜鸟教程之学习Shell script笔记(下)

    菜鸟教程Shell script学习笔记(下) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  7. 菜鸟教程之学习Shell script笔记(中)

    菜鸟教程Shell script学习笔记(中) 以下内容是学习菜鸟教程之shell教程,所整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-sh ...

  8. 菜鸟教程之学习Shell script笔记(上)

    菜鸟教程之学习Shell script笔记 以下内容是,学习菜鸟shell教程整理的笔记 菜鸟教程之shell教程:http://www.runoob.com/linux/linux-shell.ht ...

  9. C语言经典例题(菜鸟教程100例)

    学习c语言基础,怎么能少了菜鸟教程上的100道例题呢,这里整理一下每道题的链接,希望大家能享受学习的乐趣 1,有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 2,企业发放 ...

随机推荐

  1. RN的打包

    1.首先执行以下命令 在android目录下 keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -key ...

  2. react-native —— 在Mac上搭建React Native Android开发环境

    需要:JDK,Android SDK,Node.js   1.安装JDK 去Java官网下载列表选择Mac OS X x64版   2.安装Android SDK 虽然现在谷歌推荐使用Android ...

  3. SQLServer 2012 Ent 安装失败,另辟蹊径

    今天配到SqlServer2012 安装不了问题,总是NetFX3,然后一次挂了,然后VS2010 Shell也是个悲剧. 装了VS2010,可以了吧,总不能在不给力吧.但是有提示VS2010是打上s ...

  4. Android(java)学习笔记97:使用GridView以及重写BaseAdapter

    1. BaseAdapter: 对于ListView.GridView.Gallery.Spinner等等,它是它们的适配器,直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多 ...

  5. 【洛谷4815】[CCO2014] 狼人游戏(树形DP)

    点此看题面 大致题意: 已知有平民和狼人共\(n\)个,每个平民会指控和保护任何人,每个狼人只会指控平民.保护狼人.告诉你\(m\)对指控与保护的关系,求有\(k\)个狼人的方案总数. 树形\(DP\ ...

  6. 【转】批处理命令 For循环命令详解!

    批处理for命令详解FOR这条命令基本上都被用来处理文本,但还有其他一些好用的功能!看看他的基本格式(这里我引用的是批处理中的格式,直接在命令行只需要一个%号)FOR 参数 %%变量名 IN (相关文 ...

  7. c#方法(整理自菜鸟网)

    定义一个方法,根本上说就是在声明它的结构的元素 定义方法的语法如下: <访问修饰符(public啥的)> < 返回值数据类型,没有返回值的为void >  <方法名称&g ...

  8. P2096 最佳旅游线路

    最大字段和加贪心 算长了个见识吧 #include<iostream> #include<cstdio> #include<algorithm> using nam ...

  9. centos安装django

    1.如果默认安装的是python2.6,先升级至python2.7 参考:http://www.cnblogs.com/tiger2soft/p/5677843.html 2.安装pip 先下载get ...

  10. Oracle字符编码与汉字存储长度的处理

    执行如下语句,查看汉字在数据库中所占的字节: select vsize('汉') from dual; 一般情况下,得到的结果大部分为值:2 或 3 一般linux下安装oracle数据库,默认字符编 ...