标量数据

标量:数字和字符串。

数字:Perl不存在整形,全部是double类型。整形常量会被自动转换为浮点型。

Perl数字字面量(直接量):+-和小数点是非必须的,e代表10的多少次方。例如:-1.2e15,12_999.。2进制已0b开头,8进制已0开头,十六进制已0x开头,非十进制的字面量超过4个字符可以使用_区分,例如:0x1377_67

Perl支持字符串使用Unicode,但是必须使用use utf-8并且文件保存为UTF-8的格式。

字符串字面量可以支持’’和””两种方式,’\n’不表示换行,表示两个字符\和n;”\n”表示换行。双引号内的(\特殊字符,例如:\n、\r等)表示换行、回车。

变量的定义:$加上变量名称,例如:$test=”hello world”。如果变量未被赋值,则使用空字符代替。未进行赋值的变量默认值为undef。如果变量未赋值就直接使用,数字类型为0,字符串类型为’’,例如:$sum+=3;$str.=”test”。

字符串中使用变量的两种方式:

  1. 双引号:print “Saying $test”。
  2. 单引号:print ‘Saying’.$test。
  3. 避免误解:print “Saying ${test}s“。//避免变量名称无法识别
  4. 字符串可以是用qq (hello,world)、q(hello,world)表示,qq代表字符串双引号,q代表单引号。()可以改为<>、//、{}等,qq <hellow,world>

操作符优先级:

比较操作符:

Perl布尔判断规则:

  1. 1.       如果是数字类型,0为假,其他都为真。
  2. 2.       如果是字符串类型,’’为假,其他都为真。
  3. 3.       如果不是字符串或者数字,先转换为数字或者字符串再判断。
  4. 4.       特殊规则:’0’与0是同一个标量值,因此也为假。
  5. 5.       特殊规则:undef表示假,所有的引用表示为真。

Perl输入信息:由于<STDIN>返回行中会带有’\n’,可以使用chomp()删除掉’\n’,例如:chomp($line=chomp(<STDIN>))

$line=<STDIN>;//标准输入

If($line eq“\n”){

   print …

}else{

print …

}

Perl使用规则:如果去掉括号不影响语义,可以不使用(),例如:chomp <STDIN>

Perl的函数:

  1. 1.       chomp:去除行末尾的’\n’,返回实际删除的字符数
  2. 2.       defined:用于判断字符串是否为undef,使用defined($line),如果是undef返回假,否则返回真。

$line=<STDIN>

If(defined($line)){

print‘$line’ .”不是undef”

}else{

  print “\$line 是undef”

}

列表与数组

Perl列表:列表存储的是标量有序集合。例如:(1,2,3)、(1..100)、($test,$test1,$test2)。

Perl数组:存储的是列表的变量的集合。数组最大索引值$#变量名称。也可以采用负值来表示:-1代表最后一个,-2代表倒数第二个,依次类推。

qw()表示为其添加单引号,因此字符串\n等会被转换为字符:qw可以省略字符串的引号,例如:(“test”,”test1”),可以使用qw(test  test1)简写。可以不采用括号作为界定符,例如:qw ! test test1 !,qw #test test1 #等。

列表赋值:($test,$test1,$test2)=(“test”,”test1”,”test2”)

@数组名称,就可以引用整个数组。

数组操作方法:pop和push,pop取出数组最后一个值,push在末尾追加一个元素。例如:pop @arr取出数组最后一个值并返回,push(@arr,0)向数组末尾追加0

Shift和unshift,与pop和push类似,操作数组的起始元素。

splice操作数组任意位置。

 

foreach用法:foreach变量名称 (列表或者数组){

doSomething....

}

#! /usr/bin/perl

#$var 是数组元素的本身,如果修改变量也就是修改元素本身

foreach $var (qw /test test1 test2/){

print $var ."\n";

}

#如果没有使用变量,则默认使用$_

foreach (1..100){

print $_ ."\n";

}

reverse:数组顺序反序。

sort:数组排序,如果是数字排序得不到有序的结果

each: 获取数组中的索引下标和值。类似key/value

子程序

Perl子程序:sub 子程序名称 { },子程序可以放在任意位置,并且是全局的,如果存在同名的子程序,则第一个会被覆盖。

sub subName{

$n+=1;//全局变量

Print $n;//返回值为1,表示执行成功

}

&subName;//调用子程序

sub sum{

$n+=1;//最后一个运算结果作为返回值

}

#数组变量,参数会被存放在@_数组中,在程序执行时有效

sub max{

if($_[0]>$_[1]){

$_[0];

}else{

$[1];

}

}

#使用my创建私有变量

Sub max{

my($m,$n);#定义私有变量

($m,$n)=@_;#将值赋值给变量

#my($m,$n)=@_;

If($m>$n){$m}else{$n}

}

Sub max{

If(@_ !=2)#获取参数数组的长度

}

Sub max{

state $line=0;#持久化变量,可以重复使用

$line+=1;

}

use strict:强制使用严格的、良好的编程风格,会给出提示

 

 

 

 

调用子程序的三种情况:

  1. 1.       调用子程序并且传递参数:test(@lines)这种情况可以省略与符号。
  2. 2.       子程序在调用之前定义:sub test{ … },可以直接调用:test   222 ,333 ;可以省略与符号。
  3. 3.       如果子程序与内置函数同名,必须通过&符号说明调用的不是内置的函数。

Perl的state定义持久化变量

哈希

哈希的值可以是字符串、数字和undef,但是键必须为字符串。$hashName{key}。hash命名不能以数字开头,可以有字母、下划线、数字。

#! /usr/bin/perl

$family_name{"fred"}="li";

$family_name{"frid"}="luo";

foreach my $person (qw <fred frid> ){

    print "$person family_name $family_name{$person} .\n";

}

指向整个hash可以使用%hashname。hash可以与列表互换

%hashTest=("test1",21,"test2",1212,333,"test2","tes");

@arr_hash=%hashTest;

my %hashReverse =reverse  %hashTest;#获得反转的hash

获取key和value列表

@keyArr=key s %hashTest

@valueArr=values %hashTest

#each函数获取hash的键值对

while(($key,$value)=each %hashTest){#判断列表中获取到元素个数判断布尔

   print $key;

   print $value;

}

#hash排序

foreach my $key (sort $key %hashTest){

   $value=$hashTest{$key};

   print $value;

}

#exists判断hash是否存在该key

If(exists $hashTest{key}){

   ...

}

#delete从hash中删除指定的key及对应的value

delete $hashTest{key};

#%ENV获取环境变量

print $ENV(PATH);获取环境设置的PATH

正则表达式

类型

表达式

说明

例子

Unicode属性

/ab/

匹配ab的字符串

 

/\p{Space}/

判断Unicode属于空白字符(p代表包含)

 

/\p{Digit}/

判读Unicode属于数字字符

 

/\p{Hex}/

判断Unicode属于十六进制字符

 

/\P{Space}/

判断Unicode属于非空白字符(P代表不包含)

 

元字符

.

匹配任意一个字符,除"\n"

/by.e/匹配byte、byxe

量词

*

匹配0~n次字符

/by\t*/匹配by\t\t\t

.*

匹配0~n次字符,除了\t

/by.*x/匹配byx、byxxx

+

匹配1~n

 

?

匹配1次或者0

/ba_?ba/匹配ba_ba或者baba

模式分组

()

字符串分组

/(red)+/匹配red 1~n

 

/(.)\1/

反向匹配组

abba匹配bb

 

/(.)\g{1}/

反向匹配组

 

 

|

/frd(|\t)+bra/匹配出现一次\t、空格或者两者混合的字符串,并且重复1~n

 

[]

匹配字符集出现的任一字符

 

 

\d

匹配数字[0-9]

 

 

/a

/a放在末尾,表示按ASCII字符语义解释

/\d+/a

 

\s

匹配任意空白字符与/\p{Space}/类似,[\f\t\n\r]

 

 

\w

[a-zA-Z0-9]

 

 

^

代表非

[^\d]非数字

 

\D

非数字

 

 

\S

非空白

 

 

\W

非字符

 

 

模式匹配

表达式

说明

例子

/i

匹配大小写无关

/yes/i 匹配yes或者YES

/s

匹配任意字符

 

/x

在匹配表达式中加入空格

 

\A

锚位字符串绝对开头

m{\Ahttps?://}i判断是否以https开头

\z

锚尾

m{\.png\z}i

\Z

锚尾,允许后面出现换行符

 

\m

代表字符串出现在行末,而不是结尾

/test/m匹配$_="this is test

               is \m test!"

 

其他控制结构

1、unless(condition)当条件为假的时候执行,与if(condition)相反。

unless(0){

   ...

}

unless($key){

   ...

}else{

   ...#条件为真的执行

}

2、until与while表达式相反,循环会一直执行,知道循环为真退出

until($j>$i){

   $j*=2;

}

3、表达式修饰符

if块简写

print "hello world " if $n<2;

if($n<2){

print "hello world "

}

unless

 

 

while

 

 

until

 

 

foreach

 

 

4、for

for($i=1;$i<=10;$i++){

  ...

}

5、退出循环控制:只对循环控制最内层有效(last、next、redo)

last

 

next

 

redo

 

label

 

 

#获取指定目录下的文件名,并且开头不是 .

my $dir_to_process = '/home/lincc/perlTrain/script';

opendir my $dh, $dir_to_process or die "Cannot open $dir_to_process: $!";

foreach $file ( grep { -f "/$dir_to_process/$_" and $_=~/^(?!\.)/m } readdir $dh) {

print "one file in $dir_to_process is $file\n";

}

closedir $dh;

Perl初学笔记的更多相关文章

  1. C++ STL初学笔记

    C++  STL初学笔记 更系统的版本见徐本柱的PPT set 在这儿:http://www.cnblogs.com/pdev/p/4035020.html #include <vector&g ...

  2. Spring 初学笔记

    Spring 初学笔记: https://blog.csdn.net/weixin_35909255/article/category/7470388

  3. laravel 5.6初学笔记

    laravel 5.6初学笔记 http://note.youdao.com/noteshare?id=bf4b701b49dd035564e7145ba2d978b4 框架简介 laravel文档齐 ...

  4. csapp网络编程初学笔记

    csapp网络编程初学笔记 客户端-服务器编程模型 每个网络应用都是基于客户端-服务器模型,服务器管理某种资源,并且通过操作来为它的客户提供某种服务 客户端-服务器模型中的基本操作是transacti ...

  5. Python初学笔记之字符串

    一.字符串的定义 字符串是就一堆字符,可以使用""(双引号).''(单引号)来创建. 1 one_str = "定义字符串" 字符串内容中包含引号时,可以使用转 ...

  6. Ror初学笔记

    Ror正在以惊人的速度增长着,特别是在常常光顾JavaEye的时候发现Ror已经在国内有非常好的基础了,当然要凑个热闹尝尝鲜 咯. 眼下国内Ror的中文资料还是非常少的,到网上找找就仅仅有Eiffel ...

  7. python 初学笔记 (一)

    初学python第一天,希望自己真正了解计算机语言,并且做出成效. 写下学习笔记,记录学习进度,娱乐学习,不断成长. python详细介绍: python是什么?运用到哪里?有哪些在使用它? pyth ...

  8. Perl 学习笔记-列表和数组

    笔记来自<<Perl语言入门第5版>> 1. Perl中列表指标量的有序集合,数组则是存储列表的变量, 这两个术语经常混用,不过更精确地说,列表指数据,而数组指变量.数组的表示 ...

  9. Perl 学习笔记-标量数据

    最近学习Perl, 准备看一遍入门指南,关键的东西还是记录下来,以便以后复习和查看参考. 笔记来自<<Perl语言入门第5版>> 1. 在Perl内部,不区分整数值和浮点数值, ...

随机推荐

  1. Android中处理Touch Icon的方案

    苹果的Touch Icon相对我们都比较熟悉,是苹果为了支持网络应用(或者说网页)添加到桌面需要的图标,有了这些Touch Icon的网页链接更加和Native应用更相像了.由于苹果设备IPod,IP ...

  2. IOS中UIImagePickerController中文界面问题

    今天沈阳斌子,写IOS项目遇到一个调用照相机的问题,找到解决方法,高速攻克了拿给PM看,结果PM说程序调用的照相机不是中文的是英文的.必须改成中文.上网找到了方法.试用后好用拿出来和大家分享.方法例如 ...

  3. iOS gzip解压

    1. 导入libz库(如:libz 1.2.5.dylib) 2. 引入头文件 #import "zlib.h" 3. 实现解压(输入输出都为NSData对象) -(NSData ...

  4. Linux经常使用命令(九) - cat

    cat命令的用途是连接文件或标准输入并打印.这个命令经常使用来显示文件内容,或者将几个文件连接起来显示,或者从标准输入读取内容并显示,它常与重定向符号配合使用. 1. 命令格式: cat [选项] 文 ...

  5. Atitit.运行cmd 命令行 php

    Atitit.运行cmd 命令行 php 1. 运行cmd 命令行,调用系统命令的基础 1 1.1. 实际运行模式 1 1.2. 空格的问题 1 1.3. 中文路径的问题.程序文件读取编码设置 1 1 ...

  6. lightoj--1155-- Power Transmission (最大流拆点)

    Power Transmission Time Limit: 2000MS   Memory Limit: 32768KB   64bit IO Format: %lld & %llu Sub ...

  7. Nginx中的upstream 分配方法

    轮询 轮询是upstream的默认分配方式,即每个请求按照时间顺序轮流分配到不同的后端服务器,如果某个后端服务器down掉后,能自动剔除. upstream www_cc_com { server 1 ...

  8. codeforces 501 B Misha and Changing Handles 【map】

    题意:给出n个名字变化,问一个名字最后变成了什么名字 先用map顺着做的,后来不对, 发现别人是将变化后的那个名字当成键值来做的,最后输出的时候先输出second,再输出first 写一下样例就好理解 ...

  9. 关于element-ui框架里面table组件的使用

    1.表格的数据放哪里:后台返回的列表数据放到:data后面. 2.每一个列怎么显示数据:返回的列表里面的属性想要在列显示出来,将对应的字段名写到prop后面就行. 3.列表上面想显示序号:{{scop ...

  10. 同门不同类—创新Aurvana Live2/Air简评(附随身视听设备心路历程)

    (注,本文把live2/air并成一起写的,同时本人是木耳,请轻拍) 本命年各种坏东西,很是无语,终于坏到耳塞耳机了来了,之前用的拜亚DT235无缘无故就一边不响了,无奈只能扔了. 纠结了好几个月,终 ...