加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl 工作积累(不定期更新)

发布时间:2020-12-15 23:53:42 所属栏目:大数据 来源:网络整理
导读:1)url 判断是否合法: ? /^(http://|https://)?((?:[A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+).)+([A-Za-z0-9]+)[/?:]?.*$/ 如果想不用 去转义 /,.,等特殊字符,可以 /Q$varE/ 在用 =~ 判断字符串包含时,需要注意是否包含空格等字符,特别是从文
1)url 判断是否合法: ? /^(http://|https://)?((?:[A-Za-z0-9]+-[A-Za-z0-9]+|[A-Za-z0-9]+).)+([A-Za-z0-9]+)[/?:]?.*$/

如果想不用 去转义 /,.,等特殊字符,可以 /Q$varE/
在用 =~ 判断字符串包含时,需要注意是否包含空格等字符,特别是从文件中读出的时候,还要注意文件中的空白行?$context?=~?s/^s*n//mg;

?Perl Code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
my?$file?=? "blacklist.txt";
open(FILEIP,?$file);?
while($var=<FILEIP>)
{???????
???? chomp?$var;?? #?去除换行
???? if($var=~/^s*(S+)s*$/)
????{
????????$var=$1? #?去除左右空格
????}
???? print? "-$var-n";?? #加些边界特殊字符打印,才能看出是否包含空格等字符
???? if($site_name?=~?/$var/)
????{???????
???????? print? "match?it...n";
???????? last;???
????}???????
}


2)什么时候需要转义:1. 比如在"" 里面还要使用",则"; ?2. 一些特殊字符

3)数据库乱码问题:在脚本中查询的表和插入的表都要设置同样的编码如utf8($db_url->do(set names utf8)),在secureCRT显示时设置UTF-8,查询数据库显示前set names utf8;

4)打log问题:如果log文件没权限写入,那会将log信息输出在标准输出。secureCRT sz/rz 也会遇到目录权限的问题
5)倒数据不要全量重新倒,可以设定时间起始点甚至表自增id,从文件读出写入;当tmmp表为空时,perl sql执行以下语句返回还是为真,需要再次判断idmax的值是否为""
mysql> select max(id) idmax from tmmp;????????????????????????????????????????????????????????????
+-------+
| idmax |
+-------+
|? NULL |
+-------+
6)perl 对类型还是要注意,如$url为字符串,则如果判断 $url == 0 很可能为真
? ? perl DBI 中的?my $ref = $sth->fetchrow_hashref(); ?$ref->{xxx}?返回的都是字符串?

7)?perl 的print $log "xxx" ; ?syswrite $log,"xxxx"; ????perl中的printf很多字符打印有问题,最好是使用syswrite来打印数据

8)?> or >> 如果文件不存在都会创建,只是truncate or append的区别

9)sql 执行出错,页面出现很多乱码,包括log文件会有显示不了的字符,往往是因为插入的参数包含乱码,导致某些引号提早并上而执行出错,有种解决办法是只取参数的有些长度字段。

10)当log文件太大时,往往vim打开会显示为new file,可以tail/head -n num file | more 来查看部分内容

11)$db->quote($url) 这样在插入sql时不用再对$url 加' ', 如果$url 内还有单引号会被转义; sql 执行出错很可能是引号提前闭合的问题
12)?mysql> pager less? 多页显示

13) ?select?substring_index('xxx.xxx.xx.22','.',-1) ?// 得到22

14)?perl中的散列赋值都是引用拷贝而非值拷贝

15)?perl打印shell脚本的结果信息之前需要先chomp结果,否则打印出来的信息不对

16)??取出url的后缀,如html,php等
? ? if ($url =~ /^(http:// | https://).*/.*.([^/.?]+)/)
? ? {
? ? ? ? ? my $suffix = $2;?
? ? }

17) 从url中取出域名
? ? ? my @tmp = split(/:/,$url); my @tmp2= split(///,$tmp[1]); ?my $domain = $tmp2[2];


18)svn convert string from utf-8 to naive encoding; ?export LC_ALL=en_US.UTF-8


19)解析Http 头部信息

?Perl Code?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
sub?HttpHeadrParse #解析http头部信息
{
???? my?$header?=? shift;
#???$header?=~s/rn/$~/g;
???? my?@element?=? split(/rn/,$header);

???? my?%hash;
???? my?$key?= "";
???? my?$var?= "";
???? my?@tmp= "";
???? foreach?$var?(@element)
????{
???????? if($var=~/POST./? or?$var?=~/GET./)
????????{
????????????@tmp?= split(/?/,$var);
????????????$hash{ "Method"}?=?$tmp[ 0];
????????????$hash{ "Cgi"}?=$tmp[ 1];
#???????????print?"method?:?$tmp[0]?cgi:?$tmp[1]n";
????????????$hash{ "Protocol"}?=$tmp[ 2];
????????}
???????? else
????????{
????????????@tmp?=? split(/:/,$var);
????????????$hash{$tmp[ 0]}=$tmp[ 1];
???????????? if($tmp[ 0]? eq? "Host")
????????????{
???????????????? if($tmp[ 2]? eq? "")
????????????????{
????????????????????$hash[ "Port"]?=? "80";
????????????????}
???????????????? else
????????????????{
????????????????????$hash[ "Port"]?=?$tmp[ 2];
????????????????}
????????????}

????????}
????}

???? return?%hash;
}

20)去除左右空格

1
2
3
4
5
6
7
sub?trim
{
???? my?$string?=? shift;
????$string?=~? s/^s+//;
????$string?=~? s/s+$//;
???? return?$string;
}

21)根据url,get,post 做md5 去重

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#输入name,value字符串,name界定符;返回唯一的name列表
sub?get_name{
???? my?$param?=? shift;
???? my?$delim?=? shift;
???? return? ''? if?! defined($param)?||??$param? eq? '';
???? my?@name_value?=? split( "$delim",?$param);
???? my?%hash_name_value?=?();
???? for( my?$i?=? 0;?$i<=?$ #name_value;?$i++){
???????? my?$name?=? '';
???????? my?$value?=? '';
???????? if($name_value[$i]?=~?/([^=]+)=(.*)/){
????????????$name?=?$1;
????????????$value?=?$2;
????????}
???????? if($name?=~?/[.d]{ 10,50}|1d{ 9,9}$/){? #去除随机数name
???????????? next;
????????}
????????$hash_name_value{ "$name"}?=?$value;
????}
???? my?@names?=? sort? keys?%hash_name_value;
???? my?$names_str?=? join( "$delim",@names);
???? return?$names_str;
}

#计算uniquemd5
sub?uniquemd5{
???? my?($url,?$params,?$query_get,?$query_post)?=?@_;
???? my?$uniquemd5_str?=?$url;
???? my?$port?=? 0;
???? my?$q_get_name?=? '';
???? my?$q_post_name?=? '';
???? my?$p_name?=? '';
????$q_get_name?=?get_name($query_get,? '&');
????$q_post_name?=?get_name($query_post,? '&');
????$p_name?=?get_name($params,? ';');
????
???? if($url?=~? m/(?:http|https)://[^:/;? #]+(?::([0-9]+))?/){
????????$port?=?$1;
????}
???? if( defined?$port?&&? 80?==?$port){
????????$uniquemd5_str?=~? s/:[ 0- 9]+//;
????}
????
????$uniquemd5_str?.=? ",$p_name,$q_get_name,$q_post_name";
???? my?$md5?=?Digest::MD5->new;
???? my?$uniquemd5?=?$md5->add($uniquemd5_str)->hexdigest;
???? return?$uniquemd5; }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

相关内容
推荐文章
站长推荐
热点阅读