perl脚本实战总结

# 获取环境变量的值
my $java_home = $ENV{"JAVA_HOME"};

 字符串

截取字符串

# 截取字符串,从索引为3的位置(含)开始,截取长度为3
my sub_str1 = substr("abc123def", 3, 3);

# 截取字符串,从索引为3的位置(含)开始,截取到最后
my sub_str1 = substr("abc123def", 3);

拆分字符串

# 将字符串以.来拆分
# 拆分之后返回一个数组
my @split_array = split(/\./, "abc.123.def");


# 分别打印数组和对应的数组元素
print("split_array = @split_array \n");
print("split_array_0 = $split_array[0] \n");
print("split_array_1 = $split_array[1] \n");
print("split_array_2 = $split_array[2] \n");


# 不带括弧拆分也是可以的,看个人习惯,但是个人感觉还是要带括弧更容易阅读,不易出错
my @split_array1 = split /\./, "abc.123.def";

使用split函数去拆分字符串时,语法如下:

split(reg, str)

 也就是说,第一参数是匹配的正则表达式,第二个参数为需要拆分的字符串。关于正则表达式的使用大家可以自行百度。

需要注意的是,正则表达式需要放置在//中间,也就是两个/之间。比如,如果我们要以\拆分,那么就应该是:

# 特殊字符,比如\需要转义,我们的字符串中需要转义,正则中也需要转义
split(/\\/, "abc\\123\\def");


# 正则中需要转义,字符串中不需要
# 第一个参数解读:通过\把/转义,组合起来就是\/,然后放入到perl的正则匹配字符//之中,
# 最后就是/\//
split(/\//, "abc/123/def");

比较运算符

数字比较:

==数字相等
!=不相等
>左边数字大于右边数字
<小于右边
>=大于等于右边
<=小于等于右边
<=>如果左边的数小于右边的数返回 -1,如果相等返回 0, 如果左边的数大于右边的数返回 1 。

字符串比较:

lt小于less than
gt大于greater than
le小于等于less than or equal to
ge大于等于greater than or equal to
eq等于equal to
ne不等于not equal to
cmp如果左边的字符串大于右边的字符串返回 1,如果相等返回 0,如果左边的字符串小于右边的字符串返回 -1。compare

逻辑运算符:

and逻辑与运算符符。如果两个操作数都为 true,则条件为 true。
&&同上
or逻辑或运算符。如果两个操作数中有任意一个非零,则条件为 true。
||同上
not起否定作用,类似于Java中的!,如果条件为true,则在前面加上 not 则为false

perl正则表达式,主要有三种模式:

  1. 匹配:m//(还可以简写为//,略去m)
  2. 替换:s///
  3. 转化:tr///

关于Perl的正则表达式,可以参考菜鸟教程:

Perl正则表达式

my $str = "abc";
# 转大写
my $str1 = uc($str);
# 首字母转大写
my $str2 = ucfirst($str);

# 转大写
my $string = 'welcome to runoob site.';
$string =~ tr /a-z/A-Z/;
print "\$string = $string\n";

# 转小写
my $string = 'welcome to runoob site.';
$string =~ tr /A-Z/a-z/;
print "\$string = $string\n";

# 转小写
my $str5 = "Welcome To Shanghai";
$str5 = lc($str5);
print("\$str5 = $str5\n");

# 首字母转小写
my $str6 = "WELCOME TO SHANGHAI";
$str6 = lcfirst($str6);
print("\$str6 = $str6\n");
# 获取操作系统名称
my $os = $^0;
$os = lc($os);
print("os = $os\n");
# os可能的取值是aix、linux、mswin32,其余的未知
# .= 拼接字符串
my $str = "abc";
my $str1 = "123";
my $str2 = $str .= $str1;
print("str2 = $str2 \n");

文件测试操作符

-d为目录
-e文件或目录名存在
-f为普通文件
-p文件是命名管道(FIFO)
-s文件或目录存在且不为0(返回字节数)
-z文件存在,大小为0(目录恒为false),即是否为空文件

文件操作

# 删除文件
unlink("/home/dake/file/test.txt");

执行shell命令

# 执行shell命令
# 两边的括弧是反引号,就是ESC下面的那个按钮,在英文状态下的输出结果
`mkdir -p dir1/dir2 && chmod 755 dir1/dir2`;

# 也可以给出返回结果,方便判断 shell 命令执行结果是否正确
my $result = `mkdir -p dir1/dir2 && chmod 755 dir1/dir2`;

特殊变量

@_:接收函数变量的数组,类似于 Java 等面向对象语言的接收参数的对象。

# 定义函数
sub test {
    my (filed1, filed2, filed3) = @_;
    # ...
}

# 调用函数
test($id, $name, $age);


# 调用参数时传递几个,@_参数数组就可以接收几个。
# 如果传递的多了,接收的时候少,不影响

类似于 Java 等面向对象语言的实体类

// 定义函数
public void test (Person person){

    String id = person.getId();
    String name = person.getName();
    String age = person.getAge();
    // ...
}

# 调用函数
Person person = new Person();
person.setId("1");
person.setName("张三");
person.setAge(18);

test(person);

那这里的@_是不是就等于上面示例中的person示例呢?

那如果我想获取对应数组中的某个参数呢?使用下标即可。

$id = $_[0];
$name = $_[1];

# 以上分别是获取接收参数的第一个和第二个参数
# 注意,下标从0开始
# 注意,接收具体某个参数的符号是$,不能使用数组符号@

$_:表示当前被遍历的元素

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北冥牧之

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值