基于REST架构的Web Service之服务端篇(0 位领导批示)

之前写了篇<获取当前天气,基于REST的简单实例>,只能算是REST的伪实现。

前一阵的一个项目中需要用到不同应用程序间读写数据,尝试写了一下,尽管还有一些不足,不过基本理解了REST架构的一些概念。

首先看看我写的API类,这是一个抽象类。一开始是想写成接口,每个类都得实现 post, get,put,delete 等方法(接口)。后面考虑到要处理用户与数据验证,还是暂写成一个抽象类。

全文阅读 »

Discuz的passport与Perl版本的passpost[通用](1 位领导批示)

最近做的一个项目中 需要perl与php进行数据通信.我用LWP::UserAgent的POST方法实现了与PHP程序的连接.
不过在安全上有很大问题.找了找.DZ的passport就直接拿来用了..哇卡卡..

首先是Discuz的passport方法

全文阅读 »

Perl 批量删除过期文件(0 位领导批示)

代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl
 
#---------------------------------------------------------
use strict;
my $dir = "dirname/";
opendir DH, $dir or die "cannot chdir to $dir : $!";
for my $file (readdir DH)
{
    ($file eq '.') and next;
    ($file eq '..') and next;
    if (time() - (stat($dir.$file))[9] > (60*60))
    {
        unlink $dir.$file;
    }
    print $dir.$file."\n";
}
closedir DH;

然后创建一个计划任务进行处理.

这个代码中会将一小时前创建的文件删除.

时间可以进行修改 (60*60) 单位:秒

一道趣味题(1 位领导批示)

原贴地址:http://bbs.blueidea.com/thread-2881919-1-1.html

题目:首先把你的生日列出来 比如 1987 12 25
然后一位位的相加 1+9+8+7+1+2+2+5=35
把得出的数字再拆分 再加 3+5=8
最后向屏幕输出:8
19871225可看作字符型也可以看作整型,想怎么看就怎么看,不限。

我用perl写了一个函数..思路与其它人用js.vbs.php的思路类似.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
use strict;
print &ageSum('19841007');
sub ageSum
{
    my $age = shift();
    my @age = split('',$age);
    my $sum = 0;
    foreach my $v (@age)
    {
        $sum += int($v);
    }
    $sum > 9 ? ageSum($sum) : return $sum;
}
Tags :

Perl学习之字符串和排序(0 位领导批示)

Perl被设计成90%擅长处理文本,10%处理其余的问题。因此Perl有强大的文本处理能力,包括正则表达式。但有时正则表达式过于复杂,需要一种更简单的方法来处理字符串。

一、使用索引寻找子串

查找的方法依赖于查找的地方。如果在一个大字符串中查找,可以使用index函数。

Perl查找子串第一次在大字符串中出现的地方,返回第一个字符的位置。字符位置是从0开始编号的。如果子串在字符串的开头处找到,则index返回0。如果一个字符后,则返回1,依次类推。如果子串不存在,则返回-1。

1
2
3
my $text = "hello world!";
my $where = index($text, "wor");
print $where;#本例输出6

index函数总是报告子串出现的第一个位置。可以使用可选的第三个参数要求它从后面的某个地方开始查询,它会告诉index从什么位置开始。

NOTE:通常不能重复的查找某个子串,除非使用了循环。

如果想知道某个子串最后出现的位置。可以使用rindex 函数来做到。

1
2
3
my $text = "hello world!";
my $where = rindex($text, "l");
print $where;#本例输出9

rindex函数也有可选的第三个参数,它给出的是可能的最大值。

全文阅读 »

Perl学习之目录操作(0 位领导批示)

一、在目录树上移动

程序在某个工作目录(working directory)下运行,这是相对路径的起点。

chdir可以改变工作目录。它和Unix shell,Win command下的cd命令类似。


chdir "/test" or die "打开目录出错:$!";

错误发生时将给变量$!赋值。通常应当检查$!的值,因为它将告诉你chdir失败的原因。

工作目录会被Perl启动后的所有进程所继承。但是对于调用Perl的进程的工作目录将不会改变,因此,不能写一个Perl程序来代替shell下的cd命令。

二、Globbing

通常,shell将每个命令行中的任何的文件名模式转换成它所匹配的文件名。这被称作globbing。例如,在echo命令后使用了文件名模式*.pm,shell会将它转换成它所匹配的文件名。


my @all_files = glob "*";
foreach $v (@all_files)
{
	print $v."\n";
}

@all_files得到了当前目录下的所有文件,这些文件按照字母排序的,不包括由点(.)开头的文件。


my @all_files = glob ".* *";
foreach $v (@all_files)
{
	print $v."\n";
}

这里,我们包括了额外的 点星号(.*) 参数,来得到所有的文件(由点开头的文件,以及不由点开头的文件)。引号中两个项之间的空隔是必须的。

全文阅读 »

Perl学习之文件检验(0 位领导批示)

一、文件检测操作

如果程序会建立新的文件,在程序创建新文件之前,我们应先确定是否存在同名的文件,以免重要数据被覆盖掉。对于这种问题,我们可以使用–e选项,检测是否存在相同名字的文件。

例:


$filename = 'phper7.rar';
die "$filename 已经存在.\n"
if -e $filename;

检测文件的选项是由连接线(-)和一个字母组成,字母指测试的类型,后接被测试的文件名或文件句柄。大多数选项返回true/false值,但有少数例外。

(1)-r, -w, -x以及-o检测相应的属性对effective user 或group ID是否为真,它是指实际负责运行此程序的用户。

(2)Unix文件系统包括几种类型,分别可有-f, -d, -l, -S, -p, -b, 以及-c检测,任何一种必属于其中之一。

(3)时间检测,-M, -A, -C(均大写),返回系统最后一次修改,访问,以及索引节点被修改到现在的天数。

(4)-T和-B分别检测一个文件是文本的还是二进制的。

(5)当给定的文件句柄是一个TTY(系统函数isatty()的返回结果,不能对文件名使用这个测试)时,-t文件检测项返回true。

全文阅读 »

Perl学习之结构控制(流程控制)(0 位领导批示)

一、if else 控制结构

一旦能比较两个值时,就希望能根据这些比较结果作判断。和别的语言类似,Perl中也提供了if控制结构。
如果需要另一种选择,可以使用关键字else。

NOTE:花括号是必须的(这一点和C,php不同)。

二、while 控制结构

while 语句可以循环执行其内部的一块代码直到其条件非真。

条件中真假值的判断和if结构中是一样的。和if控制结构相同,花括号是必须的。判断条件在迭代前执行,如果条件为假,则一次也不执行。

三、foreach 控制结构

foreach 从列表(数组)的第一个元素一直循环执行到最后一个元素,一次迭代一个。


foreach $list (qw/一 二 三/)
{
	print "$list\n";
}

foreach 控制变量每一次迭代从列表中取出一个新值。

全文阅读 »

Perl学习之使用正则表达式处理文件(0 位领导批示)

可以通过正则表达式来改变文本。到目前为止,只介绍过怎么匹配模式。现在,我们将向你演示怎样通过模式来改变字符串中相应地部分。

一、使用s///进行替换

如果将 m// 这个模式匹配看作同文字处理器的 查询(search) 类似的功能,那Perl中 s/// 操作的则类似于 查询并替换(search and replace) 。它将替换变量中模式所匹配上的部分。


$_ ="我喜欢打球";
s/很喜欢/不喜欢/; #很喜欢被不喜欢替换掉
print "$_\n";

如果没有匹配上,则什么也不会发生,此变量也不会有任何更改。

s///会返回一个Boolean 值。如果成功替换则返回true;否则返回false。

1.使用 /g 进行全局替换

在前面的例子中你可能已经注意到,s///值进行一次替换,无论是否还有地方还能匹配上。当然,这只是默认的行为。修饰符 /g 要求s///将不相重叠的所有匹配上的部分都进行替换。


$_ = "哇,好大的棉花糖哇!";
s/哇/哟/g;
print "$_";

全局替换的一个常用地方是将多个空格用单个空格替换掉。

2.不同的分隔符

如同m//和qw//一样,我们也可以改变s///的分隔符。但这里使用了3个分隔符,因此有些不同。
通常的(非配对的)字符,由于没有左字符和右字符的区别,则可以像使用正斜线(/)那样使用。

如果使用的是配对的字符,也就是说其左字符和右字符不的,则必需使用两对:一对存放模式,一对存放替换的字符串。分隔符甚至可以是不同的。

全文阅读 »

Perl学习之正则表达式的应用(0 位领导批示)

一、使用m//匹配

我们曾经将模式放在一对正斜线(//)里面,如/fred/。这是m//(模式匹配)的一种简写。同qw//操作一样,可以使用任何成对的分隔符。
如果使用正斜线(/)作为分隔符,则可以省略掉前面的m。

二、可选的修饰符

有几个修饰符(modifier),通常叫做标记(flag),可以后缀在正则表达式后面来该变其默认的行为。

1.不区分大小写:/i

要创建一个大小写无关的模式,如匹配FRED时,也能匹配上fred, Fred,可以使用修饰符/i。

2.匹配任何字符:/s

默认情况下,点(.)不匹配换行符,这对于 单行中查找 的问题能很好解决。如果你的字符串中有换行符,并希望点(.)能匹配它们,那可以使用/s 这个修饰符。它将模式中点(.)的行为变成同字符类[\d\D]的行为类似:可以匹配任何字符,包括换行符。

3.添加空格:/x

/x 修饰符,允许你在模式中加入任何数量的空白,以方便阅读。

Perl中,注释可以被作为空白,因此使用/x,可以在模式中加上注释。
#号表示后面是注释,如果需要匹配井号,可以使用\#或[#]。注意不要在注释中使用闭分隔符,否则将结束此模式匹配。

4.将可选字符结合起来
如果在一个模式中需使用不止一个修饰符,可以一个接着一个。其顺序是不重要的。

全文阅读 »

随机显示的10篇日志

评论最多的10篇日志

浏览最多的10篇日志