Perl语言学习

BGI-College生信入门——6、Perl小骆驼学习笔记(一

2022-07-19  本文已影响0人  华大基因学院

「环境」

-w显示程序中出现的一些警告,方便debug

#!/usr/bin/perl -w

「基础语法」

perl -e'print "hello world!\n"'

hello world!

「创建perl脚本」

vi hello_world.pl

# 进入输入模式键入以下内容,并保存退出

#!/usr/bin/perl -w

print"hello world!\n";

print'hello world!\n';

# 保存退出

:wq

「运行hello_world.pl」

perl hello_world.pl

「运行结果」

hello world!

hello world!\n

双引号和单引号的区别:双引号可以正常解析转义符(\),单引号无法解析则会原样输出

「标识符」

程序中使用的变量名、常量名、函数名和语句块名等统称为标识符

英文字母(a~z,A~Z),数字(0~9)和下划线(_)

区分大小写

「数据类型」

「标量:数字和字符串(使用时在变量前加$表示标量)」

1.单引号内的字符串直接量(单引号内表示单引号或反斜杠需要用反斜杠转义)

my$s1= cool;

my$s2="today is$s1";

my$s3='today is $s1';

print$s2$3;

#运行结果:today is cool today is $s1

2.字符串操作符:“.”表示连接,“x”表示重复

my$a= bio;

my$b= informatics;

my$c=$a.$b

my$d=$ax 3;

print$c$d;

#运行结果:bioinformatics biobiobio

3.双目赋值操作符:“+=”、“*=”和“.=”

my$j+= 1;

#等效于my $j = $j + 1;

my$k*= 2;

#等效于my $k = $k * 2

my$l.= 3;

#等效于my $l = $l . 3

「数组:用于存储一个有序的标量值的变量」

1.数组 @ 开始,使用美元符号($)+变量名来访问数组的变量(指定下标)

@number = (1,2,3,4,5);

print$number[0];

#运行结果:1

#也可以用qw简写来定义数组

@data = qw/1 2 3 4 5/;

@data = qw!1 2 3 4 5!;

@data = qw#1 2 3 4 5#;

@data = qw[1 2 3 4 5];

@data = qw{1 2 3 4 5};

2.按序列输出的数组形式:起始值..结束值

@data = (1..10);

print"@data\n";

#运行结果:

1 2 3 4 5 6 7 8 9 10

「添加或删除数组元素」

1.pop

#删除数组最后一个元素

pop @array;

2.shift

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

shift@array;

3.push

#将List(列表)中的值添加到数组末尾

push @array, List;

4.unshift

#将List(列表)中的值添加到数组开头,并返回新数组的元素个数

unshift @array, List;

「访问数组元素」

1.任何求值得到数字的表达式都可用作下标,如果得到非整数会自动舍去小数,无论正负

2.下标超过数组尾端则返回undef

「切割数组:」

@data = (1..10);

@copy = @data[3,4,5];

print@copy;

「列表的赋值:」

左侧列表的三个变量被依次赋予右侧列表对应的值,等效于三次独立的赋值操作

($a,$b,$c) = ("earth","moon", undef);

左右两侧数量不对等时:

左侧(变量)>右侧(标量),多余的变量会被设成undef

右侧(标量)>左侧(变量),自动忽略多余的标量

「数组只能包含标量,不能包含其他数组,即数组无法成为列表中的元素」

「splice操作符:」

用于删除或替换

向列表指定位置追加元素,可以将length设为0即可

#offset:起始位置;length:替换的元素个数;list:替换元素列表

splice @array, offset [, length[, list]];

「split函数将字符串转为数组」

pattern,分隔符

expr,指定字符串数

limit,返回该数组元素个数

split [pattern, [expr, [limit]]] string;

「join函数将数组转换为字符串」

expr,连接符

list,列表或数组

join expr list;

「sort函数对数组排序」

1.大写字符排在小写字符前面

2.数字排在字母前面

3.标点散落在各处

「each操作符」

遍历数组元素,返回元素的索引值和元素的值

use 5.012;

my @rocks = qw/earth moon spark star/;

while(my($index,$value) = each @rocks){

say"$index:$value";

}

# 等效于:

@rocks = qw/earth moon spark star/;

foreach$index(0..$#rocks){

print"$index:$rocks[$index]\n";

}

「reverse操作符」

读取列表(数组)的值,并按相反的次序返回该列表

不会修改列表的值

「哈希变量:一个key/value对的集合」

键值对之间的逗号可以使用“=>”表示

%data = ('earth',100,'moon',80,'spark',50);

「访问哈希值:」

$data{earth};

「返回哈希所有的keys」

keys %data;

「展开哈希」

@array = %hash;

「哈希赋值」

反序哈希(需要键值对均唯一)

my %inverse_hash = reverse %hash;

「exists函数判断是否存在某个键」

if(exists${"keys"});

「delete函数删除指定的键值对」

delete$hash{"keys"};

「变量上下文」

@data = ('earth','moon','spark');

@copy = @data;#复制数组

$num= @data;#数组赋值给标量,返回数组元素个数

「比较操作符(数字/字符串)」

==(or eq) #相等

!=(or ne) #不等

<(lt) #小于

>(gt) #大于

<=(or le) #小于或等于

>=(or ge) #大于或等于

获取用户输入

$l= ;

「布尔值」

1.如果是数字,0为假,其他所有数字都为真

2.如果是字符串,空字符为假,其他所有字符为真

3.如果既不是字符串也不是数字,先转换为数字或字符串再判断真假

4.字符串“0”跟数字“0”是同一个标量,字符串“0”是唯一当成假的非空字符串

5.布尔值取反:!

「chomp操作符」

去除行末的换行符

$text="a line of text\n";

chomp($text);

chomp($text= );

「while控制结构」

只要条件为真,就会不断执行代码块

$count= 0;

while($count< 10){

print"count is now$count\n";

$count+= 1;

}

「foreach控制结构」

逐项遍历列表中的值,依次迭代

### 在循环中若修改了控制变量的值,则会同时修改列表中的元素

my$word;

foreach$word(qw/earth moon spark star/){

print"The planet is$word\n";

}

「undef值」

用于构造数字累加器 累加一些奇数

my$n= 1;

my$sum;

while($n< 10){

$sum+=$n;

$n+= 2;

}

print"The total was$sum\n";

「defined函数」

判断某个字符串是undef而不是空字符

#如果是undef返回假,否则返回真

$string= ;

defined($string);

「Perl的默认变量:$_」

#例如在foreach循环开头省略控制变量

foreach(1..10){

print"I can count to$_.\n";

}

「标量上下文与列表上下文」

大家中学时代做语文阅读的时候总会有一道题——“请你根据上下文分析xxx词在行文中的具体作用”,Perl里面的“上下文”与之类似,同一个表达式在不同的代码上下文,可能会产生不同的含义

my @people = qw/abc cde bcd/;

#列表上下文

my @sorted_people = sort @people;

#标量上下文

my$num= 100 + @people;

print@sorted_people$num;

#运行结果:abc bcd cde 103

强制指定标量上下文

my @rocks=qw/abc bcd cde/;

print"I have", scalar @rocks,"rocks!\n";

上一篇下一篇

猜你喜欢

热点阅读