博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Perl5 语言精粹
阅读量:6219 次
发布时间:2019-06-21

本文共 2273 字,大约阅读时间需要 7 分钟。

hot3.png

Perl5 语言废弃了很好的特性,例如 autoref:

push $array, name;

Perl5 速度越来越快,已经和 Python 不相上下,而且我也最熟悉,加载包也最容易,不过 加载当前目录,从 5.26 就要取消了。

把一个 '0xffff' 格式的字符串转换成数字,然后转换成字符:

say chr(hex('0x44')); # Dsay sprintf("0x%x", ord('D')); # 44

翻转一个字符串:

scalar reverse('abcde');

原来,单引号字符串中,只有单引号和转义符号本身的转义才有效。

my $str = '\\ \'';

前置 if 要对表达式或是值用括号包围起来,原来 Longest Match Rule 可以简化这样的括号。

if ($a > $b) { say 'a > b' }

return 的优先级不是最低的,and 比它的还低,所以如果 ruturn 表达式中有 and/or, 要用括号保护起来:

sub is_a  { my $a = shift; return (length($a) == 1 and $a eq 'a') }

智能匹配符可以匹配数组引用和区间:

say 'smart match range ok' if 'a' ~~ ['a'..'z'];

JSON::XS 中的 encode_json 会区别字符串中的 \t \r \f:

say encode_json(['a', "\t\r\f\n"]);## => ["a","\t\r\f\n"]

if 表达式中,返回 1 会当成真,返回 0 会当成假。

使用 given .. when 和 smart match : ~~ 要加载声明:

no warnings "experimental";my $dog = 'Splot';given ($dog) {   when ('Fido') { say 'is Fido' }   when ('Splot') { say 'is Splot' }   default { say 'not Fido or Splot' }}

smart match 对于字符串来说,和 eq 一样:

say 'it is same' if 'str' ~~ 'str';

尾部的 if 可以不用括号包围表达式,而且 if 的优先级比 and/or 还要低。

say '$a is a' if length($a) == 1 and $a ~~ 'a';

包名和函数名称不能相同,会发生冲突,因为他们本就在同一个命名空间中:

package PackageName;sub PackageName { say 'hello' }

Perl5 不能直接遍历字符串的字符,要用 split 把字符串拆分成字符数组:

for my $char (split('', $string)) { say $char }

map, List::Util qw(all) 的使用,都不要逗号:

@opt_atoms = map { opt_atom($_) } @atoms;if (all { is_chars($_) } @array) { say 'is chars array' }

substr 的用法:

my $str = '0123456';say substr($str, -2); # 最后两个字符56say substr($str, 2);  # 从第二个字符后的所有字符, 23456say substr($str, 2, 2); # 从第二个字符开始,长度为 2 的字符串 23say substr($str, 2, -2); # 从第二个字符开始,直到倒数第二个字符, 234say substr($str, -4, -2);  # 从倒数第4个字符,到倒数第二个字符, 34

获取字符串中某个字符出现的次数,要用正则表达式:

my @a = ('abcda' =~ /a/g);say scalar(@a);

index 和 rindex 返回的位置是一样的,一个是从前面找,一个从后面,效率不同罢了。 如果用 index 返回的值做判断,要小心了,没有找到返回的是 -1, 而不是 0, 0 也是找到了

say index('abcde', 'ab'); # 0say index('abcde', 'de'); # 3 say rindex('abcde', 'de'); # 3say "$start start with $str" if index( $str, $start ) == 0;say "$str end with $end" if $str ~~ /$end$/;

用正则表达式可以制作很多函数:

# trim$str =~ s/^\s+|\s+$//g;

以 utf8 编码形式读入文件内容:

sub read_file {   my $file = shift;   error("file: $file not exists") if not -e $file;   local $/;   open my ($fh), '<:utf8', $file or die $!;   return <$fh>;}

转载于:https://my.oschina.net/u/563463/blog/1509617

你可能感兴趣的文章
基础运维:详细系统文件目录说明
查看>>
易宝典文章——玩转Office 365中的Exchange Online服务 之六 了解Exchange Online对于邮箱使用的限制...
查看>>
Oracle Database常见存储用语Terms
查看>>
centos linux java安装
查看>>
【数据恢复】详解ORA-8103错误
查看>>
Windows Docker和Windows Nano Server来啦!
查看>>
oracle数据字典
查看>>
自动统计机器硬件信息插入数据库
查看>>
我的友情链接
查看>>
Apache日志分析 shell短语
查看>>
大型网站系统架构的演化
查看>>
Nginx 中last和break 及 permanent 和 redirect 的爱恨情仇
查看>>
致歉!《迟来的观后感》一文存在问题!
查看>>
mysql 安全
查看>>
【Transact-SQL】SQL Server自动把left join自动转化为inner join、以及关联时的数据重复问题...
查看>>
Options for mounting NFS filesystem
查看>>
Linux学习-第四节课
查看>>
delphi获取剩余磁盘空间
查看>>
keepalived
查看>>
java通过报文交换数据
查看>>