十分钟学perl够用(客服MM都懂了)

简介: 零基础,perl语言,10分钟入门

零基础,perl语言,10分钟入门

1.Hello,World

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

说明:
(1)第一行指定解释器,-w参数表示提示警告(或者使用use strict命令,执行更严格的检查);
(2)第二行输出hello, world!;
(3)如果习惯c的函数方式,print的参数可以打括号;
(4)第三行是注释,注释以#打头;
(5)如果习惯shell的方式,print的参数可以没有括号;
(6)双引号内可以使用转义字符;

不妨设文件名为helloworld.pm
程序的执行方法为:
(1)perl helloworld.pm
(2)chmod 755 helloworld.pm && ./helloworld.pm

2.常量

2.1数字
(1)Perl内部总按照“双精度浮点数”保存数字并执行运算;
(2)0377=>八进制;0xFF=>十六进制;
2.2字符串
(1)单引号表示字符串,不转义;
(2)双引号表示字符串,转义且解释变量;
2.3字符串操作符
(1)拼接操作符:“.”=>拼接字符串;
(2)重复操作符:“x”=>一个字符串重复多次;

#!/usr/bin/perl -w
print ("hello,"."world!\n");
print ("hello " x 3);
输出结果是:
hello,world!
hello hello hello

最后要说明一点,Perl是弱类型语言,字符串和数字会相互转化,这一点和php一样。

3.变量

(1)变量以$开头,后接一个标示符;
(2)如何用变量获取用户输入?
使用,它获取用户的输入(一般以换行结束),可以使用chomp去除结尾的换行符。

#!/usr/bin/perl -w
$count = 0;
while($count<10)
{
chomp($input = );
print($input);
$count++;
}

(3)未定义变量
未定义的变量会赋予undef值,它既不是数字,也不是字符串;
它有可能被当做数字0使用;
使用define函数可以知道一个变量是否被定义;

#!/usr/bin/perl -w
$var = undef;
print($var);
if(defined($var))
{
print("defined!\n");
}
else
{
print("undefined!\n");
}
$var++;
print($var);

它的输出是:

Use of uninitialized value in print at undef.pm line 3.
undefined!

(4)变量的作用域
my和our可以指定变量的作用域
my指定为局部作用域;
our指定为全局作用域(默认为our);

#!/usr/bin/perl -w
our $g_one = "global_one\n";
$g_two = "global_two\n";
{
my $local_one = "local_one\n";
print($g_one);
print($g_two);
print($local_one);
}
print($g_one);
print($g_two);
print($local_one);

输出为:

global_one
global_two
local_one
global_one
global_two
Use of uninitialized value in print at our_my.pm line 13.

4.数组与列表

4.1数组
和c的数组使用非常类似:
$array[0]=”a0″;
$array[1]=”a1″;
$array[2]=”a2″;

4.2列表
圆括号内的一系列值,构成列表:

(1, 2, 3)
(“hello”, 4)
(“hello”, “world”, “yes”, “no”)
qw(hello world yes no)
(1..10)

说明:
(1)第一行,列表元素为1,2,3;
(2)第二行,列表元素为一个字符串,一个数字;
(3)第三行,列表元素为4个字符串,好多引号和逗号啊;
(4)第四行,wq操作符,用来建立字符串列表,而不用输入这么多引号和逗号,效果同(3);
(5)范围操作符“..”,表示一个范围,从左至右连续加一。

列表的赋值:
($v1, $v2, $v3) = qw(yes i am);

整个列表的引用,@操作符:
@list = qw(yes i am);
@none = ();
@huge = (1..5);
@stuff = (@list, @none, @huge);

pop和push操作符:
(1)pop弹出列表末端元素;
(2)push向列表末端压入元素;

shift和unshift操作符:
(1)shift移出列表首部元素;
(2)unshift向列表首部压入元素;

列表的输出:
(1)列表输出,只输出列表,元素间不含空格;
(2)列表的字符串化输出,输出列表,元素间加入空格;
(3)foreach控制结果,可以依次取得列表中各个元素

#!/usr/bin/perl -w
@list = qw(yes i am);
@none = ();
@huge = (1..5);
@stuff = (@list, @none, @huge);
$pop_last = pop(@stuff);
print($pop_last);
push(@stuff, "hello");
$shift_first = shift(@stuff);
print($shift_first);
unshift(@stuff, "world");
print(@stuff);
print("@stuff");
$element=undef;
foreach $element (@stuff)
{
print("$element!\n");
}
输出:
5
yes
worldiam1234hello
world i am 1 2 3 4 hello
i!
am!
1!
2!
3!
4!
hello!

4.3默认变量$_
该使用变量的地方,如果省略变量,则会使用默认变量$_。

#!/usr/bin/perl -w
$_="hello,world!";
print();
输出是:
hello,world!

5.函数

5.1函数定义与调用
(1)定义函数的关键字是sub;
(2)函数调用的关键字是&;
(3)可用return显示返回,也可用一个数字隐式返回

#!/usr/bin/perl
$num=0;
sub sumAdd
{
$num+=1;
print("$num\n");
#return $num; # 显示返回
$num; # 隐式返回
}
&sumAdd;
&sumAdd;
print(&sumAdd);
执行结果为:

5.2函数的参数
(1)调用函数时可直接带参数列表;
(2)函数定义处使用“默认变量”获取参数列表;

#!/usr/bin/perl -w
sub max
{
return ($_[0]>$_[1]?$_[0]:$_[1]);
}
$big=20;
$small=10;
print(&max($big,$small));
输出为:
20

6.程序输入输出

上文已经介绍过标准输入,下面介绍其他几种常见的输入输出。
6.1Unix工具输入输出:<>
<>提供类似于Unix工具输入输出的功能,它提供的功能能够很好的和cat/sed/awk/sort/grep等工具结合使用。

#!/usr/bin/perl -w
use strict;
while(<>)
{
chomp();
print("$_!!!\n");
}

该脚本的功能,是在输入每行后面加上!!!,它几处使用到了默认变量。
不妨设文件名为diamond.pm
不妨设hello.txt中有三行数据,分别是111,222,333
执行步骤:
(1)chmod 755 diamond.pm
(2)cat hello.txt | ./diamond.pm | cat
输出结果:

111!!!
222!!!
333!!!

6.2格式化输出:printf

#!/usr/bin/perl -w
$int_var = 2011;
$str_var = "hello,world";
printf("%d\n%s\n",$int_var,$str_var);
输出结果为:
2011
hello,world

6.3文件输入输出
Perl保留了6个文件句柄:STDIN/STDOUT/STDERR/DATA/ARGV/ARGVOUT
上述6.1中的程序还能这么执行:
./diamond.pm out.txt
则输出结果会重定向到out.txt中

输入输出到文件中中,需要打开、使用、关闭文件句柄
(1)打开文件句柄:

open LOG, “>>log.txt”;
open CONFIG, ” (2)关闭文件句柄:
close LOG;
close CONFIG;

(3)使用文件句柄:

print LOG (“hello,world!\n”);
print STDERR (“yes i am!\n”);
while()
{
chomp();
…
}

也可以使用select关键字:

print(“to stdout1!”);
select LOG;
print(“to log1″);
print(“to log2″);
select STDOUT;
print(“to stdout2!”);
#!/usr/bin/perl -w
$input_file = "hello.txt";
$output_file = "out.txt";
open INPUT, "<$input_file"; open OUTPUT, ">>$output_file";
while(
<input type="text">)
{
chomp();
print OUTPUT ("$_!!!\n");
}
close OUTPUT;
close INPUT;

说明:他的功能和之前的diamond.pm是一样的。

7.哈希hash

7.1哈希的存取

$key=”am”;
$hash_one{“yes”} = 3;
$hash_one{“i”} = 1;
$hash_one{$key} = 5;
print($hash_one{“am”});
$value = $hash_one{“hello”}; # undef

7.2哈希的引用
要引用整个哈希,使用%操作符。

%hash_one = (“hello”,5,”world”,5);
print ($hash_one{“hello”});
%hash_two = %hash_one;

7.3哈希的松绑
哈希可以转化为键值列表,称为哈希的松绑,转化后不保证键的顺序,但值一定在键的后面。

#!/usr/bin/perl -w
%hash_one = ("hello",5,"world",5);
$hash_one{"yes"} = 3;
$hash_one{"i"} = 1;
$hash_one{"am"} = 2;
@array_one = %hash_one;
print ($hash_one{"hello"});
print ("@array_one");
输出结果为:
5
yes 3 am 2 hello 5 world 5 i 1

7.4哈希的反转
建立值对应键的反转哈希。

%hash_reverse = reverse(%hash_one);

只有在键值一一对应的情况下才凑效,否则会有无法预期的覆盖发生。

7.5哈希的美观赋值
哈希的美观赋值使用=>符号。

%hash_one = (“hello”,5,”world”,5,”yes”,3,”i”,1,”am”,2);

上面这种赋值方式很容易搞错,特别是键值都是字符串的时候。

%hash_one = (
“hello” => 5,
“world” => 5,
“yes” => 3,
“i” => 1,
“am” => 2,
);

美观赋值,是不是看起来更美观,更容易区分哈什的键值呢。

7.6哈希的遍历
(1)keys和values函数能返回所有键与值的列表,但列表内顺序不保证。
@k = keys(%hash_one);
@v = values(%hash_one);

(2)each函数能一一遍历哈希,返回键值对,非常适合于while等循环;

while(($key, $value) = each(%hash_one))
{
…
}

示例代码:

#!/usr/bin/perl -w
%hash_one = (
"hello" => 5,
"world" => 5,
"yes" => 3,
"i" => 1,
"am" => 2,
);
@k = keys(%hash_one);
@v = values(%hash_one);
print("@k\n");
print("@v\n");
$key = undef;
$value = undef;
while(($key, $value) = each(%hash_one))
{
print("$key=>$value\n");
}

输出结果为:

yes am hello world i
3 2 5 5 1
yes=>3
am=>2
hello=>5
world=>5
i=>1

7.7哈希的查询与删除
(1)查询一个键是否存在,使用exists函数;
(2)删除一个键,使用delete函数;

#!/usr/bin/perl -w
%hash_one=(
"yes" => 3,
"i" => 1,
"am" => 2,
);
delete($hash_one{"yes"});
if(exists($hash_one{"yes"}))
{
print($hash_one{"yes"});
}
结果什么也不输出。

8.流程控制*(本节可跳过,都是些花哨的用法)

除了各语言常用的if/esle,for,while等流程控制外,Perl还有一些特有的控制语句,更人性化。
(1)unless控制结构
作用效果类似于if not,无效率上提升,只是使表达更自然,代码更容易理解。
(2)until控制结构
作用效果类似于while not
(3)条件修饰
判断条件可以直接写在语句的后面,以增加可读性(habadog注:这是鬼扯)。
print (“$n”) if $n < 0; $i *= 2 until $i > 1024;
&sumAdd($_) foreach @num_list;
(4)裸控制结构
只有一个花括号的结构,往往用来限制作用域,在各语言中都很常见。

{
$a = 1;
…
}

# $a失效了
(5)last控制结构
相当于c中的break,立刻终止循环;
(6)next控制结构
相当于c中的continue,立刻开始下一次循环;
(7)redo控制结构
…独有的,重新开始本次循环;

while(1)
{
# 跳到这里
print (“hello”);
redo;
}

9.高级特性

神奇的Perl还有正则、module、文件、字符串、智能匹配、进程管理、线程支持等高级特性,就不在入门手册里介绍了。
如果大伙喜欢,后续发布以上特性的手册。

希望你喜欢上Perl。

===【完】===

目录
相关文章
|
24天前
|
人工智能 开发者
【阅读十分钟,百分百成功】——通过大模型实现对客服回答的质量评估
本文章基于业务实践,总结有关客服质检场景的解决方案和处理经验,为相似场景提供可行的借鉴方法。
132 16
|
17天前
|
机器学习/深度学习 自然语言处理 搜索推荐
深度分析 | 2024主流的智能客服系统有哪些?他们是怎么实现的?
本文深入探讨了智能客服系统的使用方法和相关技术实现逻辑,涵盖前端交互、服务接入、逻辑处理、数据存储四大层面,以及自然语言处理、机器学习、语音识别与合成、数据分析与挖掘、知识库管理和智能推荐系统等核心技术,帮助企业更好地理解和应用智能客服系统,提升服务效率和客户满意度。
96 1
|
2月前
|
存储 自然语言处理 机器人
实战揭秘:当RAG遇上企业客服系统——从案例出发剖析Retrieval-Augmented Generation技术的真实表现与应用局限,带你深入了解背后的技术细节与解决方案
【10月更文挑战第3天】随着自然语言处理技术的进步,结合检索与生成能力的RAG技术被广泛应用于多个领域,通过访问外部知识源提升生成内容的准确性和上下文一致性。本文通过具体案例探讨RAG技术的优势与局限,并提供实用建议。例如,一家初创公司利用LangChain框架搭建基于RAG的聊天机器人,以自动化FAQ系统减轻客服团队工作负担。尽管该系统在处理简单问题时表现出色,但在面对复杂或多步骤问题时存在局限。此外,RAG系统的性能高度依赖于训练数据的质量和范围。因此,企业在采用RAG技术时需综合评估需求和技术局限性,合理规划技术栈,并辅以必要的人工干预和监督机制。
169 3
|
4月前
|
数据采集 监控 测试技术
大型IM稳定性监测实践:手Q客户端性能防劣化系统的建设之路
本文以iOS端为例,详细分享了手 Q 客户端性能防劣化系统从0到1的构建之路,相信对业界和IM开发者们都有较高的借鉴意义。
172 2
|
27天前
|
存储 人工智能 运维
最新榜单 | 盘点2024年10大主流工单系统
随着互联网的发展,工单系统因其多样化功能和高效管理能力,成为企业运营的重要工具。本文介绍了10大主流工单系统,包括合力亿捷、阿里云服务中台、华为云ROMA ServiceCore等,它们各具特色,帮助企业提升服务质量和运营效率,实现数字化转型。
45 7
|
2月前
|
人工智能 自然语言处理 搜索推荐
AI技术在智能客服系统中的应用与挑战
【9月更文挑战第32天】本文将探讨AI技术在智能客服系统中的应用及其面临的挑战。我们将分析AI技术如何改变传统客服模式,提高服务质量和效率,并讨论在实际应用中可能遇到的问题和解决方案。
335 65
|
1月前
|
自然语言处理 数据可视化 搜索推荐
构建一个基于通义千问的智能客服系统
公司开发一个智能客服系统,帮助用户快速找到他们需要的商品信息、解决问题,并提供个性化的购物建议。系统需要能够处理大量的用户提问,并以自然语言的形式给出准确的回答。
87 1
|
1月前
|
人工智能 自然语言处理 搜索推荐
选型攻略 | 智能客服系统该怎么选?(好用的智能客服系统推荐)
智能客服系统的选型需要综合考虑渠道功能、系统性能、客服工作管理、客户管理以及成本效益等因素。目前合力亿捷推出的智能知识库,梳理海量知识,根据不同主题对知识进行分类,使其结构更清晰。
71 0
|
1月前
|
人工智能 自然语言处理 安全
AI技术在智能客服系统中的应用与挑战
【10月更文挑战第28天】本文将深入探讨人工智能(AI)技术在智能客服系统中的应用及其面临的挑战。我们将通过实例分析,了解AI如何改善客户服务体验,提高效率和降低成本。同时,我们也将关注AI在实际应用中可能遇到的问题,如语义理解、情感识别和数据安全等,并提出相应的解决方案。
|
2月前
|
存储 安全 开发工具
百度公共IM系统的Andriod端IM SDK组件架构设计与技术实现
本文主要介绍了百度公共IM系统的Andriod端IM SDK的建设背景、IM SDK主要结构和工作流程以及建设过程遇到的问题和解决方案。
68 3

热门文章

最新文章