Perl小技巧:文件操作自动测试脚本语言
“转速星球”通过精心收集,向本站投稿了10篇Perl小技巧:文件操作自动测试脚本语言,下面是小编为大家整理后的Perl小技巧:文件操作自动测试脚本语言,如果喜欢可以分享给身边的朋友喔!
篇1:Perl小技巧:文件操作自动测试脚本语言
*找到具有指定特征的文件* $path = “/path/to/dir/”;opendir DIR, $path;@arr1 = readdir DIR;@arr2 = grep{-T “$path$_”} @arr1; #text files only@arr3 = grep{!-d “$path$_”} @arr1; #no directories@arr4 = grep{-s “$path$_” 1024} @arr1; #less than 1K
*找到具有指定特征的文件*$path = “/path/to/dir/”;opendir DIR, $path;@arr1 = readdir DIR;@arr2 = grep{-T “$path$_”} @arr1; #text files only@arr3 = grep{!-d “$path$_”} @arr1; #no directories@arr4 = grep{-s “$path$_” < 1024} @arr1; #less than 1K代码解释:假如被测试的目录项是一个文本文件,那么 -T 文件操作符就会返回真,
Perl小技巧:文件操作自动测试脚本语言
。其实针对目录项的测试操作还有很多。(注:文件和目录在系统中都是以目录项的形式来管理的,所以要区别一个目录项指向的是一个文件还是一个目录需要相应的操作符)。注意上面的 readdir 函数返回指定目录下的所有目录项。因为在 grep 函数中对目录项的测试需要文件的完全路径,所以我们把 $PATH(存储了目录项的部分路径) 和 $_(存储了目录项的名字)中的内容联合起来得到文件的完全路径 *对目录进行递归搜索*use File::Find;find(\&handleFind, 'imac:documents:code');sub handleFind{ my $foundFile = $File::Find::name; print “$foundFile\n” if ($foundFile =~ /\.html?$/i);}RESULT: imac:documents:code:index.html imac:documents:code:perl:example.HTM 运行结果: 代码讨论:那些工作于 Unix 系统的 Perl程序员可以非常简便的利用 UNIX 上提供的工具来完成许多日常的工作,比如递归的列出指定目录下的所有目录项(也就是列出指定目录及指定目录子目录下的所有目录项目)。然而 Perl 的一个最大的特征就是可以运行于很多的平台上。所以如果你碰巧工作在一个非 UNIX 的平台,或者如果你虽工作在 UNIX平台,但不喜欢使用系统工具写脚本,你可以选择 Perl。要完成这些巧妙的工作,你需要使用 perl 中的 File:Find 模块。当你加载了这个模块的时候,你就可以使用其中的 find 子函数,在调用这个函数的时候,需要带参数:第一个参数是一个函数的引用,这个函数由你自己建立,每次一个文件被找到的时候,它都会运行。接下来的一个参数是一串你想要搜索的路径。我写的这个示例脚本是运行在 Macintosh OS 8.x 系统上的,所以我使用了 Mac 系统的路径分隔符 :。如果是在 Windows,你可以用反斜杠,如果是在 Unix 系统则是正斜杠(至于在 Amiga 系统上用什么我就不知道了)。总之,find 函数将会在每次找到一个文件的时候调用你给出的子函数,而且会对子目录进行查找。在我的 handledfind 子函数中,我通过这个模块特定变量 $File::Find::name 来获得每次 find 找到的文件名。然后,就可以对该文件执行任何你想的测试,在上面的例子中,我们输出有 .html 的扩展名文件名。 *文件读操作* *一次读入整个文件内容。*
open FH, “运行结果:一下就显示了所有的文件内容,此刻你应该非常的自豪。:) 代码讨论:尖括号 对文件句柄进行操作,在标量上下文中它将返回文件的下一条记录,在数组上下文中它将返回所有的记录。在默认的情况下,文件中的记录被认为是由换行符分开(例如回车或其他代表新行开始的字符)。你可以重新设定这个默认的分隔符,然后 Perl 将会以你指定的分隔符为准来替代换行符。全局变量 $/ 里存储了输入文件的分隔符,如果你把 $/ 的值设置为 undef ,那么 Perl 将会认为整个文件是一条记录(因为此刻已经没有文件分隔符了)。牢记 $/ 是全局变量,千万不要在脚本的其他地方不经意的改变它,这个错误将很难被发现。你可能会问,我们能否不改变 $/,而采用把文件的所有记录读到一个数组中,然后把数组联合成一个很长的字符串(比如 $slurp = join(“”,;print $slurp;
open(MYOUT, “>bottle.txt”);*STDOUT = *MYOUT;print “message”;运行结果:文本文件 bottle.txt 现在包含 message 字符串。代码讨论:以前可能你配合使用过 Print 函数和文件句柄,但是你是否知道就算你没有使用文件句柄,Perl 也默认你在使用一个称为 STDOUT 的句柄?C 程序员知道 STDOUT 代表标准输出,也就是通常的屏幕,或终端窗口(或者是 CGI 程序的输出端 - 浏览器)。在这里我们完成的工作是创建我们自己的文件句柄,它指向一个给定的文件,然后我们做了一件比较鬼的工作,使用 * 前缀把 STDOUT 转换为 typeglob 类型。Typeglob 类型的数据可以有别名,这样一个变量可能会指向另一个其他名字的变量。上面第二行代码使 STDOUT 指向 MYOUT 变量。所以执行 print 操作时的默认输出对象也就成为了我们创建的文件句柄。 *同时向两个文件句柄执行写操作*
use IO::Tee; $tee = IO::Tee->new(“>>debuglog.txt”, \*STDOUT); print $tee “an error ocurred on ”.scalar(localtime).“\n”;运行结果:an error ocurred on Fri Feb 23 21:44:20 代码讨论:如果,由于种种原因你想要同时向两个位置写入同一个字符串,这和 UNIX 下的 tee 工具的用途一样。即使你不是工作在 Unix平台上,Perl 也通过 Tee 模块为你提供这个功能。Tee 模块可以在 CPAN下载,你应该把它安装到 Perl 的 IO 库文件夹中。Tee 模块以 OOP 方式编写,所以使用它之前你应该首先使用它的 new 方法来创建一个 Tee 对象,整个过程需要两个参数,每个参数既可以是代表文件句柄的字符串,也可以是一个对已打开的文件句柄的引用。在上面的例子中,我们用一个字符串来代表一个以附加模式打开的文件句柄,它指向名为 debuglog.txt 的文件,另一个参数是系统内置的文件句柄 STDOUT,整个句柄是系统自动创建的,print 函数默认情况对它进行操作。为了得到一个文件句柄的引用我们需要对一个 typeglob 类型的数据使用反斜杠。Typeglob 可以代表任何已命名的某个变量,不论它是数组,散列还是标量等。使用 * 很有必要,因为文件句柄自己没有前缀符号。new 操作符返回 Tee 类的一个实例对象,然后我们把整个实例赋给 $tee 标量。现在,无论什么时候我们向 $tee 进行写入操作,我们都同时向两个位置进行写操作。 *更多文件操作。。。* *从一个文件的完全路径中找出它的名字*
use File::Basename;$path = “/docs/sitecircus.com/html/tricks/trick.of.the.week.html”;$basename = basename($path, “.html”);print $basename;运行结果:trick.of.the.week 代码讨论:好了,成功了。问题是要找出文件的名字,要不带任何路径前缀,不带任何扩展名。File::Basename 模块可以使这很容易实现,我们只需要把文件的完全路径还有要剔除的扩展名传给它。上面的 path 变量是文件的完全路径,注意文件分隔符是 /,这个字符很特殊,因为它是操作系统的保留字符。这里你不能在文件名里使用系统的分隔符。你应该知道当今流行的操作系统都使用自己独特的文件分隔符:Unix使用 /,Windows 使用 \,Macintosh 使用 :(顺便说一下,在 Windows 上的 Perl 脚本中,你既可以使用 \也可以使用 /作为文件分隔符,Perl 的解释器能理解你的意思)。File::Basename,当然,能正确在完全路径中找到文件名,不论时在什么系统下。 *改变文件的所有者*
($uid, $gid) = (getpwnam($username))[2,3] or die “$user not in passwd file”;chown ($uid, $gid, $file) or warn “couldn't chown $file.”;运行结果:无输出代码讨论:有的时候,你可能知道一个用户名,而你想用这个用户名做些事,比如改变一个文件的所有者。但是不幸的是,Perl 的 chown 命令不能接受用户名作为参数,但是可以接受一对数字:userid 和 groupid。虽然有这些不便之处,Perl 并没有让我们陷入困境,我们可以把用户名作为 getpwnam 函数的参数,获得一个数组,里面包含了用户名对应的 userid 和 groupid,分别对应着数组里的第二和第三个元素。
原文转自:www.ltesting.net
篇2:Perl概述自动测试脚本语言
Perl 是 Practical Extraction and Report Language( 实用摘录和报告语言 ) 的简称,是由 Larry Wall 所发展的,其最新版本为 5.6 。 Perl 的设计目标是帮助 UNIX 用户完成一些常见的任务,这些任务对于 shell 来说过于沉重或对移植性要求过于严格。 Perl 是
Perl是Practical Extraction and Report Language(实用摘录和报告语言)的简称,是由Larry Wall所发展的。其最新版本为5.6。Perl的设计目标是帮助UNIX用户完成一些常见的任务,这些任务对于shell来说过于沉重或对移植性要求过于严格。
Perl是按GNU Public License的形式分发的,其实质是免费的,原先运行于UNIX和类UNIX系统,现在已可以方便地在OS/2,Windows9x,Windows/NT等系统下运行。
Perl是解释运行的,一般Perl程序的第一行需注明自己是一个Perl程序而不是shell程序,所以一般将下面一行语句:
#! /usr/bin/perl
作为文件的第一行。
第一个Perl程序
就拿各类书籍最常用显示“Hello! Welcome!”程序来说吧。下面是其源程序:
#! /usr/bin/perl
print “你好!欢迎光临网络教室! \n”;
这里的第一行说明了这是一个Perl程序,它也是Perl的注释,注释是从#开始至该行结束的所有文字。第二行是程序的可执行部分,这里只有一条print语句,如果你学过C语言,就能很快掌握它。
MILY: 宋体; mso-bidi-font-family: 宋体“>提问并保留结果
在此基础上做稍微复杂一点的改变,我们使该程序按你的名字打招呼。要做到这一点,需要一个变量来存放姓名。我们使用$name来保存姓名。
#!/usr/bin/perl
print ”请问您的姓名?“;
$name=;
chop($name);
print ”你好, $name,欢迎光临网上学园!\n“;
这里第三行表示从终端获得行输入并赋值给$name,这里的$name的值有一个换行符,第四行chop($name)表示去掉$name的最后一个字符(即换行符),
第五行显示输入。
增加选择
现在让我们为园主zmd编写一个特殊的欢迎辞,而对其他人则采用普通欢迎辞。要达到这样的效果必须将输入的姓名与zmd作比较,如果相同则执行特殊功能。
#!/usr/bin/perl
print ”请问您的姓名?“;
$name=;
chop($name);
if ($name eq ”zmd“){
print ”欢迎zmd进入本系统!\n“;
} else {
print ”你好, $name,欢迎光临网上学园!\n“;
}
这里第五行用eq操作符对两个字符串进行比较,相同则执行下一句,否则执行else下的语句(是不是和C语言差不多?)。
猜测密码
现在已经可以对zmd发不同的欢迎辞,但如何加上密码来控制权限呢?比如说,可以让除zmd以外的人都必须输入密码直到正确为止:
#!/usr/bin/perl
$password=”wsxy“; #密码为wsxy
print ”请问您的姓名?“;
$name=;
chop($name);
if ($name eq ”zmd“){
print ”欢迎zmd进入本系统!\n“;
} else {
print ”你好, $name!\n请输入密码:“;
$guess=;
chop($guess);
while ($guess ne $password){
print ”密码错误,请重新输入:“;
$guess=;
chop($guess);
}
}
这里先将密码保存在标量变量$password中,然后当不是zmd登录后,先显示欢迎语句,然后要求输入密码,通过ne操作符将输入结果和$password相比较,密码相同则退出,不同则一直循环下去。
原文转自:www.ltesting.net
篇3:关于PERL的数据库自动测试脚本语言
DBM简介: DBM是一种文件数据储存数据,由于采用哈希结构进行连接,因此具有一些数据库的特点功能与普通文本数据库相比,具有稳定,检索速度快和支持量大的优点,由于DBM是从 Unix 系统中移植来的,因此在Unix/ linux 系统中优点比较明显,而在NT系统中则不
DBM简介:
DBM是一种文件数据储存数据,由于采用哈希结构进行连接,因此具有一些数据库的特点功能与普通文本数据库相比,具有稳定,检索速度快和支持量大的优点,由于DBM是从Unix系统中移植来的,因此在Unix/linux系统中优点比较明显,而在NT系统中则不太理想,在NT中使用有时会另数据文件变得十分庞大,
DBM的使用:
数据库采用关联数组方式保存数据,并与关联数组结合使用。
打开文件:
dbmopen(%USERFILE,”dbfilename“,0666);
此时将把数据值赋给USERFILE关联数组。
关闭文件:
dbmclose(%USERFILE);
添加数据:
dbmopen(%USERFILE,”dbfilename“,0666);
$USERFILE{$no}=value;
dbmclose(%USERFILE);
$no是数组的关联值,必须唯一,否则该关联数据会被更新,
删除数据:
dbmopen(%USERFILE,”dbfilename“,0666);
delete $USERFILE{$no};
dbmclose(%USERFILE);
$no是要删除的关联值。
更新数据:
dbmopen(%USERFILE,”dbfilename“,0666);
$USERFILE{$no}=value;
dbmclose(%USERFILE);
历遍数组:
dbmopen(%USERFILE,”dbfilename“,0644);
%TEMP=%USERFILE;
dbmclose(%USERFILE);
foreach (keys(%TEMP)){
$value=$TEMP{$_};
}
原文转自:www.ltesting.net
篇4:Perl 中的正则表达式自动测试脚本语言
1 正则表达式的三种形式 首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是: 匹配:m/regexp/ (还可以简写为 /regexp/ ,略去 m) 替换:s/pattern/replacement/ 转化:tr/pattern/replacemnt/ 这三种形式一般都和 =~ 或 !~ 搭配使用(
1 正则表达式的三种形式
首先我们应该知道 Perl 程序中,正则表达式有三种存在形式,他们分别是:
匹配:m/
替换:s/
/
转化:tr/
/
这三种形式一般都和 =~ 或 !~ 搭配使用(其中 ”=~“ 表示相匹配,在整条语句中读作 does,”!~“ 表示不匹配,在整条语句中读作 doesn't),并在左侧有待处理的标量变量,如果没有该变量和 =~ !~ 操作符,则默认为处理 $_ 变量中的内容。举例如下:
$str = ”I love Perl“;
$str =~ m/Perl/; # 表示如果在 $str 中发现 ”Perl“ 字符串,则返回 ”1“ 否则返回 ”0“。
$str =~ s/Perl/BASH/; # 表示将变量 $str 中的 ”Perl“ 字符串替换为 ”BASH“,如果发生此替换则返回 ”1“,否则返回 ”0“。
$str !~ tr/A-Z/a-z/; # 表示将变量 $str 中的所有大写字母转化为小写字母,如果转化发生了则返回 ”0“,否则返回 ”1“。
另外还有:
foreach (@array) { s/a/b/; } # 此处每次循环将从 @array 数组中取出一个元素存放在 $_ 变量中,并对 $_ 进行替换处理。
while (
Perl 的正则表达式中如果出现 ,则发生匹配或替换后 () 内的模式被 Perl 解释器自动依次赋给系统 $1, $2 ...... 请看下面的例子:
$string = ”I love perl“;
$string =~ s/(love)/<$1>/; # 此时 $1 = ”love“,并且该替换的结果是将 $string 变为 ”I
$string = ”i love perl“;
$string =~ s/(i)(.*)(perl)/<$3>$2<$1>/; # 这里 $1 = ”i“,$2 = ” love “,$3 = ”perl“,并且替换后 $string 变为 ”
love “
替换操作 s/
/
s/
/ 的模式全部替换为
s/
/
比如下面的例子:
$string = ”i:love:perl“;
$string =~ s/:/*/; #此时 $string=”i*love:perl“;
$string = ”i:love:perl“;
$string =~ s/:/*/g; #此时 $string=”i*love*perl“;
$string =~ tr/*/ /; #此时 $string=”i love perl“;
$string = ”www22cgi44“;
$string =~ s/(\d+)/$1*2/e; # (/d+)代表 $string 中的一个或多个数字字符,将这些数字字符执行 *2 的操作,因此最后 $string 变成了 ”www44cgi88“。
下面给出一个完整的例子:
#!/usr/bin/perl
print”请输入一个字符串!\n“;
$string =
chop($string); # 将$string最后一个换行的字符\n删除掉
if($string =~ /perl/){
print(”输入的字符串中有 perl 这个字符串!\n“;
}
如果输入的字符串含有 perl 这个字符串的话,就会显示后面的提示信息。
2 正则表达式中的常用模式
下面是正则表达式中的一些常用模式。
/pattern/结果.匹配除换行符以外的所有字符x?匹配 0 次或一次 x 字符串x*匹配 0 次或多次 x 字符串,但匹配可能的最少次数x+匹配 1 次或多次 x 字符串,但匹配可能的最少次数.*匹配 0 次或一次的任何字符.+匹配 1 次或多次的任何字符{m}匹配刚好是 m 个 的指定字符串{m,n}匹配在 m个 以上 n个 以下 的指定字符串{m,}匹配 m个 以上 的指定字符串[]匹配符合 [] 内的字符[^]匹配不符合 [] 内的字符[0-9]匹配所有数字字符[a-z]匹配所有小写字母字符[^0-9]匹配所有非数字字符[^a-z]匹配所有非小写字母字符^匹配字符开头的字符$匹配字符结尾的字符\d匹配一个数字的字符,和 [0-9] 语法一样\d+匹配多个数字字符串,和 [0-9]+ 语法一样\D非数字,其他同 \d\D+非数字,其他同 \d+\w英文字母或数字的字符串,和 [a-zA-Z0-9] 语法一样\w+和 [a-zA-Z0-9]+ 语法一样\W非英文字母或数字的字符串,和 [^a-zA-Z0-9] 语法一样\W+和 [^a-zA-Z0-9]+ 语法一样\s空格,和 [\n\t\r\f] 语法一样\s+和 [\n\t\r\f]+ 一样\S非空格,和 [^\n\t\r\f] 语法一样\S+和 [^\n\t\r\f]+ 语法一样\b匹配以英文字母,数字为边界的字符串\B匹配不以英文字母,数值为边界的字符串a|b|c匹配符合a字符 或是b字符 或是c字符 的字符串abc匹配含有 abc 的字符串(pattern)() 这个符号会记住所找寻到的字符串,是一个很实用的语法,第一个 () 内所找到的字符串变成 $1 这个变量或是 \1 变量,第二个 () 内所找到的字符串变成 $2 这个变量或是 \2 变量,以此类推下去。/pattern/ii 这个参数表示忽略英文大小写,也就是在匹配字符串的时候,不考虑英文的大小写问题。\如果要在 pattern 模式中找寻一个特殊字符,如 ”*“,则要在这个字符前加上 \ 符号,这样才会让特殊字符失效下面给出一些例子:
范例说明/perl/找到含有 perl 的字符串/^perl/找到开头是 perl 的字符串/perl$/找到结尾是 perl 的字符串/c|g|i/找到含有 c 或 g 或 i 的字符串/cg{2,4}i/找到 c 后面跟着 2个到 4个 g ,再跟着 i 的字符串/cg{2,}i/找到 c 后面跟着 2个以上 g ,再跟着 i 的字符串/cg{2}i/找到 c 后面跟着 2个 g,再跟着 i 的字符串/cg*i/找到 c 后面跟着 0个或多个 g ,再跟着 i 的字符串,如同/cg{0,1}i//cg+i/找到 c 后面跟着一个以上 g,再跟着 i 的字符串,如同/cg{1,}i//cg?i/找到 c 后面跟着 0个或是 1个 g ,再跟着 i 的字符串,如同/cg{0,1}i//c.i/找到 c 后面跟着一个任意字符,再跟着 i 的字符串/c..i/找到 c 后面跟着二个任意字符,再跟着 i 的字符串/[cgi]/找到符合有这三个字符任意一个的字符串/[^cgi]/找到没有这三个字符中任意一个的字符串/\d/找寻符合数字的字符,可以使用/\d+/来表示一个或是多个数字组成的字符串/\D/找寻符合不是数字的字符,可以使用/\D+/来表示一个或是更多个非数字组成的字符串/\*/找寻符合 * 这个字符,因为 * 在常规表达式中有它的特殊意思,所以要在这个特殊符号前加上 \ 符号,这样才会让这个特殊字符失效/abc/i找寻符合 abc 的字符串而且不考虑这些字符串的大小写3 正则表达式的八大原则
如果在 Unix 中曾经使用过 sed、awk、grep 这些命令的话,相信对于 Perl 语言中的正则表达式(Regular Expression)不会感到陌生。Perl 语言由于有这个功能,所以对字符串的处理能力非常强。在Perl语言的程序中,经常可以看到正则表达式的运用,在 CGI 程序设计中也不例外。
正则表达式是初学 Perl 的难点所在,不过只要一旦掌握其语法,你就可以拥有几乎无限的模式匹配能力,而且 Perl 编程的大部分工作都是掌握常规表达式。下面给大家介绍几条正则表达式使用过程中的 8 大原则。
正则表达式在对付数据的战斗中可形成庞大的联盟――这常常是一场战争。我们要记住下面八条原则:
・ 原则1:正则表达式有三种不同形式(匹配(m/ /),替换(s/ / /eg)和转换(tr/ / /))。
・ 原则2:正则表达式仅对标量进行匹配( $scalar =~ m/a/; 可以工作; @array =~ m/a/ 将把@array作为标量对待,因此可能不会成功)。
・ 原则3:正则表达式匹配一个给定模式的最早的可能匹配。缺省时,仅匹配或替换正则表达式一次( $a = 'string string2'; $a =~ s/string/ /; 导致 $a = 'string 2')。
・ 原则4:正则表达式能够处理双引号所能处理的任意和全部字符( $a =~ m/$varb/ 在匹配前把varb扩展为变量;如果 $varb = 'a' $a = 'as',$a =~ s/$varb/ /; 等价于 $a =~ s/a/ /; ,执行结果使 $a = ” s“ )。
・ 原则5:正则表达式在求值过程中产生两种情况:结果状态和反向引用: $a=~ m/pattern/ 表示 $a 中是否有子串 pattern 出现,$a =~ s/(word1)(word2)/$2$1/ 则“调换”这两个单词。
・ 原则6:正则表达式的核心能力在于通配符和多重匹配运算符以及它们如何操作。$a =~ m/\w+/ 匹配一个或多个单词字符;$a =~ m/\d/” 匹配零个或多个数字。
・ 原则7:如果欲匹配不止一个字符集合,Perl使用 “|” 来增加灵活性。如果输入 m/(cat|dog)/ 则相当于“匹配字符串 cat 或者 dog。
・ 原则8:Perl用 (?..) 语法给正则表达式提供扩展功能。(这一点请同学们课后看相关资料)
想要学习所有这些原则?我建议大家先从简单的开始,并且不断的尝试和实验。实际上如果学会了 $a =~ m/ERROR/ 是在 $a 中查找子串ERROR,那么你就已经比在 C 这样的低层语言中得到了更大的处理能力。
原文转自:www.ltesting.net
篇5:perl连接access数据库自动测试脚本语言
前题是必须安装好activeperl (505以上),以及MS Access 97 一. 安装Win32-ODBC模块 步骤1: 从TOOLS栏目中下载Win32-ODBC.zip,下载完后用winzip解开到一个temp目录,共有三个文件: Readme Win32-ODBC.ppd Win32-ODBC.tar.gz 步骤2: 在DOS窗口下,temp目录
前题是必须安装好activeperl (505以上),以及MS Aclearcase/“ target=”_blank“ >ccess 97
一. 安装Win32-ODBC模块
步骤1:
从TOOLS栏目中下载Win32-ODBC.zip,下载完后用winzip解开到一个temp目录,共有三个文件:
Readme
Win32-ODBC.ppd
Win32-ODBC.tar.gz
步骤2:
在DOS窗口下,temp目录中运行下面的DOS命令:
ppm install Win32-ODBC.ppd
二. 准备测试用数据库(ACCESS)
步骤1:
启动MS ACCESS,建立一个新空数据库,命名为odbctest.mdb,保存在某一目录中(记住路径),
步骤2:
然后新建一个表,建立三个字段:
字段名称 数据类型
Name 字符,长度50
Email 字符,长度50
Age 数字,长整型
将这个表保存为address(注意这个例子中,没有用自动增加的ID).输入若干记录:
Nighthawk nighthawk@163.net 20 1234567
John jt@163.net 24 0284393293
kit kit@21cn.com 18 3948932
保存后,关闭数据库文件。
步骤3:
打开控制面板中的 ODBC数据源(32位),在用户DSN栏中,找到用户数据源列表,选中名称为“MS Access 97 Database”的一行,然后按“配置”键。
在Database框中按”Select..“,选择步骤1.2中建立的数据库文件odbctest.mdb,按OK即可。ODBC设置中的其它项目全部采用缺省设置,然后就是OK,确定,关闭对话窗口。
三. 这时候,数据库已经可以用了,我们来测试一下:
#!/usr/bin/perl
use Win32::ODBC;
$DSN = ”MS Access 97 Database“;
$DBase = ”access.mdb“;
#连接数据库
if (!($db = new Win32::ODBC($DSN))){
print ”连接数据库失败.n“;
exit();
}
else{
print ”连接数据库成功 (连接号:“, $db->Connection(), ”)nn“;
}
#数据库中的表
print ”数据库中的表:“;
@tables = $db->TableList;
print @tables;
print ”n“;
#选择数据表
if (! $db->Sql(”SELECT * FROM [address] WHERE age>=20“) ){
@FieldNames = $db->FieldNames();
$Cols = $#FieldNames + 1;
#表中字段数
print ”表address字段数:$Colsn“;
#字段列表
for ($i = 0; $i < $Cols; $i++){
print ”$FieldNames[$i]t“;
}
print ”n“;
#列出年龄大于20的记录
while($db->FetchRow()) {
@values = $db->Data();
print @values;
print ”n“;
}
}
##### sql #########
#添加记录
$sqlinsert = ”INSERT INTO address VALUES ('Euler', 'euler@21cn.com', 28, '021-345689')“;
#更新记录
$sqlupdate = ”UPDATE address SET age = age+10 “;
#删除记录
$sqldelete = ”DELETE FROM address WHERE name='jimtyan'“;
$rc = $db->Sql($sqlinsert);
die qq(SQL 失败 ”$sqlinsert“: ), $db->Error(), qq(n) if $rc;
$rc = $db->Sql($sqlupdate);
die qq(SQL 失败 ”$sqlupdate“: ), $db->Error(), qq(n) if $rc;
$rc = $db->Sql($sqldelete);
die qq(SQL 失败 ”$sqldelete“: ), $db->Error(), qq(n) if $rc;
#关闭链接
$db->Close();
进一步学习请访问Win32-ODBC模块作者主页:www.roth.net/perl/odbc/ Nighthawk 版权所有, 署名
原文转自:www.ltesting.net
篇6:perl 域名查询程序自动测试脚本语言
# perl 国内域名查询程序
# flybird@chinaasp.com
# -9-22
# perl 写socket程序确实很简单,
use IO::Socket::INET;
$fqdn=”ourstory.com.cn“;
$server = 'whois.cnnic.net.cn';
$sock = IO::Socket::INET->new(”$server:43“) || die ”fail“;
print $sock ”$fqdn\n“;
@ret=<$sock>;
print ”@ret“;
原文转自:www.ltesting.net
篇7:PERL与MySQL(DBI接口)自动测试脚本语言
通用DBI方法 TABLE border=1 cellSpacing=1 width=624 TBODY TR TD vAlign=center P align=justifySPAN class=text1connect /SPAN/P/TD TD vAlign=center P align=justifySPAN class=text1建立与一个数据库 服务器 的连接/SPAN/P/TD/TR TR TD vAlign=center
通用DBI方法
connect
建立与一个数据库服务器的连接
prepare
获取准备执行的SQL语句
do
准备并执行一个SQL语句
disconnect
断开与一个数据库服务器的连接
quote
入引用字符串(块)
execute
执行存储过程
fetchrow_array
取出下一行到一个数组之中
fetchrow_arrayref
取出下一行到数组中,返回数组的引用
fetchrow_hashref
取出下一行到哈希表,返回其引用
fetchall_arrayref
取出所有的数据到一个数组,返回其引用,
finish
结束语句、释放系统资源
rows
返回作用的行的数目
data_sources
返回本机中可用的数据库的数组。
ChopBlanks
去除空格
NUM_OF_PARAMS
存储过程中占位符的数目
NULLABLE
class=text1>哪一个行允许Null。
MySQL 的特殊方法
insertid
最后自动递增的值
is_blob
为BLOB的行
is_key
为键的行
is_num
为数字的行
is_pri_key
为主键的行
is_not_null
不能为NULL的行
length
理论上最大的列的数目
max_length
物理上最大的列的数目
NAME
列名
NUM_OF_FIELDS
返回的字段的数目
table
返回的集中的表的名称
type
行的类型
_CreateDB
创建一个数据库
_DropDB
删除一个数据库
connect
建立与一个数据库服务器的连接
prepare
获取准备执行的SQL语句
do
准备并执行一个SQL语句
disconnect
断开与一个数据库服务器的连接
quote
入引用字符串(块)
execute
执行存储过程
fetchrow_array
取出下一行到一个数组之中
fetchrow_arrayref
取出下一行到数组中,返回数组的引用
fetchrow_hashref
取出下一行到哈希表,返回其引用
fetchall_arrayref
取出所有的数据到一个数组,返回其引用,
finish
结束语句、释放系统资源
rows
返回作用的行的数目
data_sources
返回本机中可用的数据库的数组。
ChopBlanks
去除空格
NUM_OF_PARAMS
存储过程中占位符的数目
NULLABLE
哪一个行允许Null。
MySQL 的特殊方法
insertid
最后自动递增的值
is_blob
为BLOB的行
is_key
为键的行
is_num
为数字的行
is_pri_key
为主键的行
is_not_null
不能为NULL的行
length
理论上最大的列的数目
max_length
物理上最大的列的数目
NAME
列名
NUM_OF_FIELDS
返回的字段的数目
table
返回的集中的表的名称
type
行的类型
_CreateDB
创建一个数据库
_DropDB
删除一个数据库
connect:
使用connect方法建立一个到数据源的连接。$data_source应该以DBI:driver_name:开始,例如:
$dbh = DBI->connect(”DBI:mysql:$database“, $user, $password);
$dbh = DBI->connect(”DBI:mysql:$database:$hostname“,
$user, $password);
$dbh = DBI->connect(”DBI:mysql:$database:$hostname:$port“,
$user, $password);
如果用户名或者是口令没有定义的话,那么DBI将使用DBI_USER,DBI_PASS环境变量分别作为其值。如果你没有定义主机的话,那么默认的是“localhost”,如果你没有定义端口号的话,以默认的mysql的端口号(3306)作为端口号。
prepare:
通过数据库引擎预备SQL语句并且返回一个语句句柄($sth)用于参与execute方法,例如:
$sth = $dbh->prepare($statement) or die ”Can't prepare $statement:
$dbh->errstr\n“;
do
do方法预备并执行一个SQL语句,返回作用的行的数目,这个方法通常用于非select的语句,同时一般不需要执行多次(例如:insert,delete等)。例如:
$rc = $dbh->do($statement) or
die ”Can't execute $statement: $dbh- >errstr\n“;
disconnect
disconnect将断开与数据库的连接,通常在程序结束的时候使用。例如:
$rc = $dbh->disconnect;
quote
quote方法用于 ”escape“任何在字符串中的特定自负,并且加上引用标记。
$sql = $dbh->quote($string)
execute
该方法执行一个存储的语句。对于非select的语句来说,它返回作用的行的数目,对于select语句来说,该方法仅仅是开始了在数据库中查询,你需要fetch_*方法来取回数据。
$rv = $sth->execute or die ”can't execute the query: $sth->errstr;
fetchrow_array
这个方法取回下一行的数据,并且将其存储在一个数组之中。例如:
while(@row = $sth->fetchrow_array) {
print qw($row[0]\t$row[1]\t$row[2]\n);
}
fetchrow_arrayref
这个方法取回下一行的数据,并将其返回在一个对数组的引用之中。例如:
while($row_ref = $sth->fetchrow_arrayref) {
print qw($row_ref->[0]\t$row_ref->[1]\t$row_ref->[2]\n);
}
fetchrow_hashref
这个方法取回一行数据,并且返回一个到包含了字段名/值的哈希表的引用。这个方法不如使用一个数组引用的方法有效率。例如:
while($hash_ref = $sth->fetchrow_hashref) {
print qw($hash_ref->{firstname}\t$hash_ref->{lastname}\t\
$hash_ref- >title}\n);
}
fetchall_arrayref
这个方法被用来从一个SQL语句的执行结果中取回所有的数据(行)。它返回一个数组的引用,你可以通过一个循环来打印/显示这些数据。
my $table = $sth->fetchall_arrayref or die “$sth->errstr\n”;
my($i, $j);
for $i ( 0 .. $#{$table} ) {
for $j ( 0 .. $#{$table->[$i]} ) {
print “$table->[$i][$j]\t”;
}
print “\n”;
}
finish
指示没有更多的数据可以被取出,你可以通过这个方法释放语句句柄,并且释放系统资源。例如:
$rc = $sth->finish;
rows
返回在(updated,delete等)操作中作用的行的数目。这通常被用在do或者非select的execute()语句之后。例如:
$rv = $sth->rows;
NULLABLE
返回一个数组的引用,TRUE分别表示这个列可以允许NULL。
$null_possible = $sth->{NULLABLE};
NUM_OF_FIELDS
通过SELECT或者LISTFILEDS语句返回的列的数目。如果数目为0表示一个非SELECT语句的执行,例如,INSERT,DELETE或者UPDATE等。
$nr_of_fields = $sth->{NUM_OF_FIELDS};
data_sources
这个方法返回在localhost中的mysql服务中可用的数据库的数组。
@dbs = DBI->data_sources(“mysql”);
ChopBlanks
这个方法决定了返回的行中是否去除空格。
$sth->{'ChopBlanks') =1;
insertid
如果你使用了mysql的自动增值的特性,那么最新的自动增值将被存储。例如:
$new_id = $sth->{insertid};
is_blob
返回一个数组的引用,TRUE分别表示所指示的列是BLOB。
$keys = $sth->{is_blob};
is_key
返回一个数组的引用,TRUE分别表示所指示的列是KEY。
$keys = $sth->{is_key};
is_num
返回一个数组的引用,TRUE分别表示所指示的列包含了数字。
$nums = $sth->{is_num};
is_pri_key
返回一个数组的引用,TRUE分别表示所指示的列是一个主键。
$pri_keys = $sth->{is_pri_key};
is_not_null
返回一个数组的引用,FALSE表示这个列可以包含NULL,而你最好使用DBI标准中的NULLABLE属性。
$not_nulls = $sth->{is_not_null};
max_length、length
返回一个指示最大列的尺寸的数组的引用。最大长度是指在结果的表中的最大数值,LENGTH给出了理论上的最大值。
$max_lengts = $sth->{max_length};
$lengts = $sth->{length};
NAME
返回一个列名称的数组的引用。
$names = $sth->{NAME};
table
返回了表名称的数组的引用。
$tables = $sth->{table};
原文转自:www.ltesting.net
篇8:Perl语言中的“指针”自动测试脚本语言
在C语言中,指针的使用给我们带来了很大的方便,但是在Perl中没有直接提供这样的数据类型,在某些情况下就存在一些很不方便的地方, 例如:在调用函数时,如果参数值和返回值比较多,而且非常复杂的时候,仅仅是参数栈或返回值栈是不够用的。这时候,有两种
在C语言中,指针的使用给我们带来了很大的方便,但是在Perl中没有直接提供这样的数据类型,在某些情况下就存在一些很不方便的地方。
例如:在调用函数时,如果参数值和返回值比较多,而且非常复杂的时候,仅仅是参数栈或返回值栈是不够用的。这时候,有两种解决方法,一种是使用引用调用,这样可以传递象数组、哈希数组一类的数据,另外一种就是我要着重介绍的“指针”,主要用来传递复杂的结构,例如多维数组。下面,我用多维数组为例:
多维数组指针的创建非常简单,具体语句如下:
my $multi_array=[];
这时,$multi-array就是一个指针,它的内容是undefined. 下一步我们要给它赋值,语句如下:
@{$multi_array}=((a,...,z),(1,...,10),($a,...,$xx));
这时,$multi-array就成了一个指向二维数组的指针,当然,如果必要的话,你可以定义更多的维数,
如何使用这个二维数组的元素呢?
$multi_array->[0][1] #数组第一维,第二个元素
如何使用一行元素呢?
@{$multi_array->[0]} #二维数组的第一行元素
这样,你就可以方便的借助指针使用多维数组了。标量$multi_array就象一个普通的标量,在函数调用和返回时,就可以直接使用了。
原文转自:www.ltesting.net
篇9:Perl 程序的属性详解自动测试脚本语言
我们在很多地方都可以看见要求把 Perl 程序的属性改为 755 ,文本属性改 666 ,目录属性改777 等,这到底是什么意思?它们各代表什么意思?为什么要这样设置?如何设置?哦,这么多问题呀,让我慢慢道来 ^_^ 请注意:以下属性的设置是Unix 类操作系统必须的
我们在很多地方都可以看见要求把 Perl 程序的属性改为 755 ,文本属性改 666 ,目录属性改777 等,这到底是什么意思?它们各代表什么意思?为什么要这样设置?如何设置?哦,这么多问题呀,让我慢慢道来 ^_^
请注意:以下属性的设置是Unix 类操作系统必须的,如果你用的是 WIN95/98 操作系统,则无需任何属性的设置(如果在WIN NT/ 上采用了 NTFS 格式的话,请注意设置好 Perl CGI 相应目录的读写权限,一般是在相应目录上添加 Everyone 用户,并设置其可写即可),
1. Perl 程序和目录属性一般设置为多少?
一般来说,在 Unix 的服务器中,Perl CGI 程序的属性一定要设为755,而与 Perl 有关的数据文件,一般要设为 666 ,和 Perl 有关的目录,一般设置为 775 或 777。而在 WIN95/98/NT 下,由于 Perl 程序不是依靠属性来完成运行的,所以不必修改。
2. 755,666 等属性是什么意思?怎么算出来的?
在 Unix 中,属性值分为 OWNER、GROUP、PUBLIC 三项(其实这每项表明的是对应用户或用户组对此文件或目录的权限),而每项都可以设置权限为Read、Write、Execute(也就是权限为可读、可写、可执行),其中 Read 的值为 4 ,Write 的值为 2 ,Execute 的值为 1。那么755 就表示:
OWNER 用户(就是创建此文件或目录的用户)有 Read、Write、Execute 权限,它们的值加起来等于 7
GROUP 用户(就是创建此文件或目录的用户所在的用户组)有Read、Execute 权限,它们的值加起来等于 5
PUBLIC 用户(就是访问此文件或目录的用户)有 Read、Execute权限,它们的值加起来等于 5
666,777 也可以用类似的办法推算出来,你现在明白了吗?
对于目录来说,由于默认属性是 755 ,因此如果你的Perl 程序需要自己来建立子目录的话,就必须要有 Write
属性,所以相应目录的属性必须要改为 777,
最后还要强调一点,当你用 FTP 或 TELNET 登陆修改你的Perl 的时候,你是 OWNER 用户,而你用浏览器访问你的 Perl 程序的时候,你是 PUBLIC 用户。
3. 如何用 TELNET 或 FTP 来设置 Perl 程序的属性?
TELNET:登陆成功后,使用命令 chmod <属性值>属性值>
<文件名>即可。文件名>
FTP:我们以 CuteFTP 为例,其实其他的 FTP 软件的修改属性用法基本是一样的。
a) 首先,使用 CuteFTP 连接你的服务器,并选择你将要修改属性的文件。
b) 然后,用鼠标右键点击需要修改属性的文件,会弹菜单
c) 接着选择 Change file attributes(CuteFTP
4.0 版以上请选择 CHMOD...),会出现窗口,根据需要选择复选框,或直接在
Manual 文本框中输入适当的属性值。
d) 最后点一下 OK ,就 OK 了。 :D
原文转自:www.ltesting.net
篇10:perl如何传递数组参数shift应用自动测试脚本语言
类别中建立新物件的new()方法
:
:sub new{
: my $class=shift;
: my $self={};
: bless $self;
: }
:中 my $class=shift 是何意义?
shift 的意思就是把整个 array 的第一个 value 取出,并将 array 长度减一(有点像 pop out)
也就是说 sub new 是传一串值进入
然后 my $class 会被 assign 最前面的那个传入值..
eg (from perlfunc manpage)
sub log10 {
my $n = shift;
return log($n)/log(10);
}
那在用的时候就可以用 log10(10) or log10(200)...
原文转自:www.ltesting.net
【Perl小技巧:文件操作自动测试脚本语言】相关文章:
3.教案:文件的操作
9.辩论赛小技巧
10.教师资格面试小技巧






文档为doc格式