随笔分类 - perl
perl学习
摘要:下面是一部分比较重要的建议:1、选择正确的存储引擎以 MySQL为例,包括有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。但是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。
阅读全文
摘要:PHP版:Perl:# 需要先安装 String::CRC32use String::CRC32;sub getCrc{ open my $fd , '<' , $filepath or die("error"); my $crc2 = crc32($fd); my $crc_out = sprintf("%x", $crc2); print uc($crc_out) ; }
阅读全文
摘要:很久以前开发的功能,在服务器上执行,因为Git对utf-8支持的问题,走了很多弯路,放出所有代码供大家参考:View Code 1 #fei add for dl_patch download 2 3 4 ############# some tools for pretty codes ######### 5 sub git_write_xml_file 6 { 7 git_header_html(); 8 my $zipfile = $file_name ;#from paramter 9 my $xmlfilename = "d...
阅读全文
摘要:在linux服务器上,很容易出现中文乱码。一般情况下,只要保持服务器环境是utf8,文件格式是utf8,用各种语言默认的读写文件方式通常不会出现乱码。但是,在用perl xml dom写xml的时候就出现了这个问题。perl xml dom默认应该是用ascii来读写文件,所以,对中文要先进行解码decode,再写入。例如: 1 #更新显示的xml文件 2 sub writeXml 3 { 4 my $projectList = "$hometouch_root/config/projectList.xml"; 5 my $parser = new XML::DOM::Pa
阅读全文
摘要:1 perl -p -i.bak -w -e 's/\.JPG/\.jpg/g' *.xml这个是修改一个目录下的文件内容的,当然我们可以配合find命令来修改指定类型文件的内容,例如这里修改所以.plist文件的版本号(注意正则表达式需要转义):1 find -name *.plist | xargs sed -i 's/2\.2\.0/3\.0\.0/'
阅读全文
摘要:有时候客户给的文件文件名里面有很多空格,在网页解析的时候会把这些空格变成只保留一个,所以得去掉这些空格。通过重命名是一种方法。这里我是对文件名进行批量过滤。 1 #!/usr/bin/perl -w 2 use strict; 3 use warnings; 4 use File::Find (); 5 use File::Basename ; 6 7 #文件名过滤工具(批量改文件名,去掉文件名中的全部/或多余空格) 8 #暂不支持目录重命名 9 use vars qw/*name *dir *prune/ ;10 *name = *File::Find::name ;11 *dir = *.
阅读全文
摘要:今天在打差异包的时候,发现打包失败。原来是拷贝文件失败。于是,打文件名与文件状态打印出来看,发现添加文件的状态“A”与删除文件状态“M”调转了!这一度让我以为是Perl传递参数的时候发生了错误。于是纠结在数组引用传递的问题上,同时将代码优化了一下。后来发现这不是办法,因为实在不对劲。在本地进行若干尝试后,发现,文件在本地的状态与服务器的状态也是相反的。我用的命令是git diff-tree HEAD HEAD^ --name-status 于是尝试了将两个Hash码调转,果然,状态和服务器一样了。原来是参照物的问题,而不是Perl引用传递的问题! git diff-tree HEAD^ HEA
阅读全文
摘要:在perl里面,传递多个数组是不可行的,因为所有参数都会被压到@_里面,取出来的时候,所以数组元素都会被放到第一个数组里面。所以,用引用吧~~~ 1 use ... 2 sub array 3 { 4 my ($arr1,$arr2) = @_ ; 5 print "@$arr1 : @$arr2"; 6 } 7 sub main 8 { 9 my @array1 = qw/test test test/ ; 10 my @array2 = qw/test1 test1 test1/ ; 11 array(\@array1,\@arra...
阅读全文
摘要:使用mkdir可以创建一个目录,但只能创建一个目录。使用mkpath则可以创建连续的子目录。在linux下使用cp -p同样可以实现同样的功能。 再使用File::Copy来拷贝。 1 use File::Path; 2 use File::Copy; 3 sub writeSubFolder 4 { 5 my $root = 'E:/perl_work/'; 6 my $toDir = "project/pages/test/test.jpg" ; 7 my $fileName = "tmp/test.jpg"; 8 $toD...
阅读全文
摘要:在看《编程语言实现模式》的时候突然想到了函数的映射,想到Gitweb里面有实现这样的功能,于是看了看,分享一下: 1 #!/usr/bin/perl -w 2 use strict; 3 use warnings; 4 5 #字符串映射函数 6 our %actions = ( 7 "foo" => \&foo, 8 ); 9 10 sub foo11 {12 print "test" ; 13 }14 15 sub main16 {17 my $action = "foo";18 $actions{$action}-&
阅读全文
摘要:用perl来获取匹配字符串出现的次数的一个比较好的方法:通过/g进行全局匹配,返回数组中包含了所有已匹配的元素,再用上下文标量获得数组长度。代码如下: 1 main(); 2 sub main 3 { 4 my $str = "#####H1####" ; 5 my $divider = "#"; 6 print "length of $divider is :".testI($str , $divider); 7 } 8 #计算字符串里面字符出现次数的一个方法 9 sub testI 10 { 11 my $str = shift
阅读全文
摘要:## 介绍一下Markdown语言,一种易读的标志语言 - 首先,行首#号的个数代表h1-h6 - \>是段落的前缀 - 空行或者``代表段落 - 使用[link](www.baidu.com "百度")来表示超链接- 使用来表示图片- 使用_或*来表示加重文本- 使用-,+,*(加减号,星号)来表示无序列表- 使用1.XXX中的点来表示有序列表- 使用反引号``来标记代码,里面的代码不会被解析 int a = 1 ; for(; a < 10 ; +=a) { printf(&
阅读全文
摘要:今天Gitweb打包时出现了点问题,按照之前的经验,查看apache的error_log日志,定位到错误是sh命令里有非法的“(”这个非常明显是由于文件名里面有括号导致的错误,于是对括号进行转义。括号问题解决。括号转义后又出现空格错误,于是再转义,问题解决!怎么知道这些要转义呢?我们可以先用一个测试工程进行尝试,建立带空格以及带括号的文件。利用Git的tab提示,自动会出现这些文件名,可以发现git给出的提示,得到这些文件转义后的形式。贴点perl代码,一些简单的正则替换,共同学习...1 sub testBracket 2 { 3 my $file = "test (test)..
阅读全文
摘要:学习了perl大概有3个月了,从开始的懵懂,到现在的逐渐清晰,少不了经典书籍的帮助。当然Google大神是必需的。下面是几本比较好的书,大部分我都做了书签。做书签应该说是一个好习惯。(最近舍弃了金山快盘,因为它要登录才能下载!而百度网盘不用。)http://pan.baidu.com/share/link?shareid=106510&uk=3190391850 一开始看书的时候太急,想着尽快解决问题,但事后再回去翻看这些书的时候,由于没有做书签,导致很难找到想要的内容。 所以,后来,在找每一本书的时候,尽量找有书签的。当然,如果没有书签的,我还是会花一点时间去自己做上书签。一方面..
阅读全文
摘要:我们正在开发的一个软件是国际化软件,所以需要翻译成其他国家的语言。但是对每一次更新实际上需要改动的语言只是一部分,其他一大部分是可重用的。所以,为了避免代理商再次翻译,我们从原来的版本资源文件抽出了对应的字典文件,并进行替换,达到只翻译一部分改变了的字符串。这其他还希望用到模糊匹配,但是效果似乎不大,不过还是很有必要的。关于模糊匹配,我看到了《编程之美》里面的一个题目:“判断字符串的相似度”。与这个类似。 以下是部分Perl写的代码: [pl] #根据RC,RC2文件构造字典需要输入两个文件,利用控件ID来对应 1 #!/usr/bin/perl -w 2 use strict; 3 u...
阅读全文
摘要:最近在搭Git Server,Git提供了一个简单但强大的网页端Gitweb供用户浏览项目 因为需要添加一项小功能,所以把Gitweb的代码研究了一下,下面和大家一起分享一下... 这里,我们有一点前置知识:Perl : gitweb是用perl写的,所以,在看gitweb源代码前,请熟悉一下perl的语法...对于这一点,请一定得做,因为,凭着以往的编程经验可以使你能看懂,但是会非常痛苦。Perl追求的是“道路不止一条”,而且,语法非常奇怪,以及有非常多的默认变量,不懂语法就看gitweb,会让你发狂。 但是,了解了perl以后,再看,会让你豁然开朗...正则表达式正则表达式在很多地方都有用
阅读全文
摘要:由于要处理一些文件,找了个这样的批处理: 输出目录及子目录下所有的jpg图片的文件名,不含扩展名1 @echo off2 cd.>List.txt3 for /f "delims=" %%i in ('dir /s/a-d /b *.jpg') do >>List.txt echo %%~ni>>JustName.txt4 start JustName.txt5 6 pause其中,"delims=" 的含义是取消默认的分隔符,所以会把行上的内容照搬下来,而 "tokens=*" 表示获取
阅读全文