当前位置:网站首页>perl基础语法归纳
perl基础语法归纳
2022-08-09 04:44:00 【acmgotoac】
标量数据
perl语言中标量主要是数字标量和字符串标量。
- 数字
- 浮点数
3.25e20 (3.25乘10的20次方) - 整数
1415926 1_415_926 (perl允许整数之间加入下划线来清楚识别) - 数字运算符
| 运算符 | 意义 |
|---|---|
| ±*/ | 加减乘除 |
| % | 取模 |
| ** | 乘方 |
注意:perl中的整数和浮点数都是按照double存储计算的。
- 字符串
- 单引号
其中字符串就是字符串本身,不会转义。 - 双引号
\会转义 - 句点操作符.
连接前后的字符串 - 重复操作符x
copy字符串,如果copy次数为小数,则向下取整 - 数字与字符串之间的转换
perl根据操作符自己完成数据转换
- 标量变量
- 命名规则
以$开头;
变量标识符由字母数字下划线组成,但不能以数字开头;
变量区分大小写; - 等号赋值
- 双目赋值符
+= -= *= /= %= - 字符串变量内插
- 数值标量和字符标量比较操作符
| 数值标量 | 字符标量 |
|---|---|
| == | eq |
| != | ne |
| < | lt |
| > | gt |
| <= | le |
| >= | ge |
- chomp函数
去掉字符串末尾换行符 - chop函数
去掉字符串末尾字符 - substr函数
取出一部分字符,返回取出的字符串
substr EXPR,OFFSET,LENGTH,REPLACEMENT
#EXPR 字符串句柄
#OFFSET 处理起始位置,默认为0,负数从右开始数
#LENGTH 处理长度,负数时,从右侧数LENGTH个点,取此点和起始点之间的字符,不提供时从起始位置到末尾
#REPLACEMENT 替换字符串
- split 将字符串分割为一个数组
split /pattern/, EXPR, LIMIT
#if only pattern is given, EXPR defaluts to $_
#pattern 分隔符,可以时正则,也可以指定,defaluts为" ",省略分隔符,连续空白处都会被认为是单个分隔符
#LIMIT 限制数组长度,默认最大分割次数
- join 给定字符插入数组,转换为字符串
数组和哈希
- 数组
#!/usr/bin/perl
use strict;
use warnings;
my $scalar = "wow";
#数组定义
my @array = (1, "str", $scalar);
#元素调用
print "$array[0]\n";
#元素连接
my $array_str = join "\t", @array;
print "$array_str\n"
#数组长度 方法一
my $len = $#array + 1;
print "$len\n";
#数组长度 方法二
my $len2 = scalar @array; #scalar可以省略
print "$len2\n";
#遍历数组 方法一
foreach (@array)
{
print "$_\n" #$_ 表示默认的地方,foreach 没有指定读出元素,就存在$_中
}
#遍历数组 方法二
foreach (0..$#array)
{
print "$array[$_]\n";
}
#数组末尾添加元素 push
push @array, "push";
print "@array\n";
#数组尾删除元素 pop
pop @array;
print "@array\n";
#数组开头加入元素 unshift
unshift @array, "unshift";
print "@array\n";
#数组开头删除元素 shift
shift @array;
print "@array\n";
#颠倒数组元素顺序 reverse 不会改变原数组
my @array_reverse = reverse @array;
print "reverse answer : @array_reverse \n";
#数组排序 sort 不会改变原数组
my @array_sort1 = sort @array; #按照ASCII码默认顺序,从小到大排序
print "ASCII sort lu: @array_sort1\n";
my @array_sort2 = sort {
$b cmp $a} @array; #按照ASCII从大到小排序
print "ASCII sort ul: @array_sort2\n";
my @array_sort3 = sort {
$b <=> $a} (4, 1, 9, 10, 100); #按照数字从大到小
print "num sort ul: @array_sort3\n";
#可以自定义排序规则 sort sub_fun @array;
- 哈希
重要规则:1.keys唯一 2.键值对在哈希中无序排放
#!/usr/bin/perl
use strict;
use warnings;
#hash的定义 定义时单引号双引号都可以
my %hash = ("red", "1", 'blue', "2", "yellow", "3");
#my %hash = ("red"=> "1", "blue"=> "2", "yellow"=> "3");
#调用hash元素
print "hash element ; $hash{'red'}\n"; #只能用单引号不能双引号
#新增或更改键对
$hash{
'red'} = "new1";
print "hash new element : $hash{'red'}\n";
#返回hash的所有keys或者所有values
my @keys = keys %hash;
print "keys of hash : @keys\n";
my @values = values %hash;
print "values of hash : @values\n";
#遍历hash键对
while (my ($k,$v) = each %hash)
{
print "keys-values : $k-$v\n";
}
foreach my $keys (sort {
$hash{
$b} cmp $hash{
$a}} keys %hash)#ASCII 从大到小的keys排序
{
print "keys-values ASCII ul : $keys-$hash{$keys}\n";
}
#判断hash中是否有某个key
print "yes\n" if exists $hash{
'red'};
流程控制结构
- bool值及逻辑运算符
- bool
| 数据类型 | 规定 |
|---|---|
| 数字标量 | 0为假,其他为真 |
| 字符串标量 | ‘’,"0"为假,其他为真 |
| undef | 假 |
- 逻辑运算符
&& || !
条件判断
if…elsif…else
unless(条件为假时进入)else…
三目运算符… : …?循环
while for foreach each循环控制
| 类型 | 规定 |
|---|---|
| last | 退出当前循环,不退出外层循环,类似break |
| next | 跳过本次循环,进入下次循环,类似continue |
| redo | 忽略后边内容,重新执行本次循环 |
IO及文件读写
- IO操作
print 不自带\n
say 自带\n
printf 格式化输出字符串
sprintf 格式化,不输出
| 格式符 | 含义 |
|---|---|
| %% | % |
| %s | 字符串 |
| %d | 整型数字 |
| %f | 浮点型数字 |
| %e | 科学计算法 |
#!/usr/bin/perl
use strict;
use warnings;
printf "%010.2f\n", 3.1415126;
#%010.2f
#0 设置字符宽度补齐字符
#10 设置字符宽度为10
#.2 设置显示2位小数
#f 输出浮点型
#输出字符串,字符宽度为10,向右对齐,宽度不足用0补齐,默认用空格补齐
printf "%010s\n", "haha";
- 读写文件操作
open函数
open file, "<", $filestring;
while(<>)
边栏推荐
猜你喜欢

etcd Study Notes - Getting Started

y91.第六章 微服务、服务网格及Envoy实战 -- 服务网格基础(二)

A GDAL API version must be specified. Provide a path to gdal-config using a GDAL_CONFIG environment

杰理之播歌曲前后音量大小不一样【篇】

自动化测试-图片中添加文字注释,添加到allure测试报告中

MySQL: Implementation Principles of Submitted Read and Repeatable Read | MVCC (Multi-Version Concurrency Control) - Notes for Your Own Use

抖音直播新号怎么起号?抖音直播间不进人怎么办?

ABP中的数据过滤器

2022 High-altitude installation, maintenance, and demolition exam practice questions and mock exams

2022下半年深圳信息系统项目管理师认证招生简章
随机推荐
单元测试覆盖率怎么算?
I.MX6U-ALPHA开发板(高精度定时器)
B. Arrays Sum
leetcode:402. 移掉 K 位数字
I.MX6U-ALPHA开发板(串口实验)
2022R1快开门式压力容器操作考试模拟100题及在线模拟考试
Gopacket source code analysis
阿里云天池大赛赛题(机器学习)——阿里云安全恶意程序检测(完整代码)
Example of 360 assessment feedback questions
杰理之播放最大音量提示音播不出来【篇】
Detailed explanation of Oracle's windowing function
2022-08-08 mysql慢SQL-Q18-10GB数据量-mysql/innodb测试
【学习笔记】AGC044
Improve the user experience and add a small detail to your modal popup
TASSEL软件导入plink格式文件报错
MySQL:redo log日志——笔记自用
MySQL: Implementation Principles of Submitted Read and Repeatable Read | MVCC (Multi-Version Concurrency Control) - Notes for Your Own Use
配置网络接口的“IP“命令
必须指定GDAL API版本。提供一个路径使用GDAL_CONFIG gdal-config环境
Ali YunTianChi competition problem (machine learning) - ali cloud security malware detection (complete code)