Perl笔记
Perl笔记 【评论】 【返回】






本文作者:Evel
阅读次数:1651
发布日期:2012-12-29
 
记录一些Perl心得和笔记。分享出来。(其实网络里面很多了)

关于安装模块:
参考信息:
http://www.6zou.net/tech/how_to_ppm_install_windowsxp.html
http://fhqdddddd.blog.163.com/blog/static/1869915420120189647801/

1,从ppm安装,比较简单,但是有些时候会莫名其妙的无法连接大服务器。其中稳定的源也不多。所以不推荐。
2,从dos进到模块解压的目录,然后用命令perl -MCPAN -e shell进入cpan安装状态,敲install Module::subModule来安装.用命令m DBI来检查DBImodule是否已经安装成功。
3,以前手动安装模块走了不少弯路,现在写下来供参考:
1、编译环境
需要下载含有gcc之类的编译器,可以下载mingw或dev-pp,安装完成后设置下环境变量,比如:d:\Program Files\DEV-CPP\Bin

2、下载dmake,解压后把里面的stratup文件夹和dmake.exe复制到d:\Program Files\DEV-CPP\Bin

3、下载模块解压,进入解压后的文件夹,用cmd进入该文件夹,然后开始安装
    Perl Makefile.pl
    dmake
    dmake test
    dmake install
安装后再运行perldoc Some::Module看是否有说明文档
如果不想用命令行安装。直接用命令cpan进入cpan命令行。然后用
cpan> install File::Copy::Recursive来安装。

Using the CPAN shell need notice:

If you require a module that is not available via ppm, or you require a more recent version, you can build the module from CPAN sources. The CPAN shell is a command-line interface for fetching and building modules directly from CPAN archives. To run it, enter the following command:

    cpan

Building modules from source requires the following components:

Windows:

    Microsoft's nmake, which is available from: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q132084, or dmake, which is available from http://search.cpan.org/dist/dmake.
    a C compiler (not required for 100% pure perl modules). Supported compilers are MicroSoft Visual C/C++ 6.0 and MinGW (gcc)

以上是个人安装模块的一种方法,网上也有叙述,此文仅供参考!

mingw下载地址:
mingw
http://cdnetworks-kr-1.dl.source ... t-inst-20110802.exe
dmake下载地址:
dmake
http://ishare.iask.sina.com.cn/f/15770695.html?from=like
devpp下载地址:
devpp
http://ishare.iask.sina.com.cn/f/15770695.html?from=like

关于打包的方式。

PerlApp使用:http://docs.activestate.com/pdk/6.0/PerlApp.html
License文件:http://bbs.chinaunix.net/thread-3770881-1-1.html

CODE:

@echo off
perl -c -w Evel.pl
if ERRORLEVEL 1 goto ende

perlapp  Evel.pl --add feature --icon favicon.ico --exe Evel.exe
if ERRORLEVEL 1 goto ende

if /i "%1" == "nopause" goto done

:ende
pause



UE工具配置篇
=====================
你是不是觉得每次输入DOS命令都很罗嗦,那么我告诉你,还有更好的方式。点击高级——工具配置——在弹出的工具配置中点击插入。
1.在菜单项名称中输入perl
2. 在命令行点击浏览——在我的电脑C盘下找到perl文件夹——打开bin文件夹——选中perl.exe,然后点击打开就可以了。然后会生成像C:\Perl\bin\perl.exe这样的一行字符串。然后在后面加个空格,然后在写上"%f"。现在看起来就是C:\Perl\bin\perl.exe "%f"。
3.下面一行是工作目录,填写%p。
4.再下面一行是添加一个图标,这个有没有都可以,不过你最好还是添加一个。
5.然后在上面的选项卡点击输出,勾选“显示DOS窗口”“捕获输出”“输出到列表框”“不替换”。
OK了,点击应用,确定。现在你再点击高级,会发现最下面一个命令是perl,然后点击就可以运行当前写好的程序了。快捷键是Ctrl+Shift+0。如果你觉得每次点击高级,然后点击perl还不是很爽,能不能够吧perl执行的命令放到工具栏上,就行C++一样,点击就可以执行多好。
回答是肯定的,现在我就告诉你怎么做。点高级——配置——工具栏/菜单——定制——然后点击右边的“定制工具栏”。找到“用户工具1”,然后点击向左的箭头,把它添加到左边就可以了。然后一路确定下去。是不是在工具栏的最左边出现了perl的图标,试试看能不能运行perl程序!

==========================
1, #!/usr/bin/perl是开头的声明;
2,  如果严格区分局部和全局变量,必须用严格语法: #use strict; 否则不用声明标量的局部或者是全局.
3, my 来定义局部变量, $-标量,@-数组,%哈希表, 访问数组用中括号@array[n], 访问哈希表用大括号$hash,$#array+1获得数组长度
4,反斜线取得地址 $scalar; \@array; \%hash
5,print "@$array"如果不用双引号,直接输出,中间没有空格分开

关于反斜杠的使用:经常用于注释一些特殊符号
CODE:

结 构     含 义
\n     换行
\r     回车
\t     水平置表符
\f     换页符
\b     退格
\v     垂直置表符
\a     响铃
\e     Esc
7     任一八进制ASCII值(这里007表示bell)
\x7f     任一十六进制ASCII值
\cC     任一“控制”字符
\     反斜杠
\"     双引号
\l     下一字母小写
\L     以后所有字母小写直到\E
\u     下一字母大写
\U     以后所有字母大写直到\E
\E     结束\L和\U



关于scalar变量

简单变量分为数值型和字符串型来理解。在赋值时,如果是赋值成字符串,则需要在字符串两边加上双引号(或单引号);如果是数值则就不用了. 双引号会解析里面的变量值,单引号只返回字面所含字符。

跟字符串相关的一些运算符
CODE:

String Operator    Purpose
x    Returns a string consisting of the string on the left of the operand, repeated the number of times of the right operand.
.    Concatenates the two strings on both sides of the operator.
eq    Returns True if the two operands are equivalent, False otherwise.
ne    Returns True if the two operands are not equal, False otherwise.
le    Returns True if the operand on the left is stringwise less than the operand on the right of the operator. Returns False otherwise.
lt    Returns True if the operand on the left is stringwise less than or equal to the operand on the right of the operator. Returns False otherwise.
ge    Returns True if the operand on the left is stringwise greater than or equal to the operand on the right of the operator. Returns False otherwise.
gt    Returns True if the operand on the left is stringwise greater than the operand on the right of the operator. Returns False otherwise.
cmp    Returns -1, 0, or 1 if the left operand is stringwise less than, equal to, or greater than the right operand.
,    Evaluates the left operand, the evaluates the right operand. It returns the result of the right operand.
++    Increments the string by one alphabetic value.



跟数字相关的运算符,后面有所有运算符的统一介绍,可以先熟悉熟悉
CODE:

Value Operator    Purpose
+    Computes the additive value of the two operands.
-    Computes the difference between the two operands.
*    Computes the multiplication of the two operands.
/    Computes the division between the two operands.
%    Computes the modulus(remainder) of the two operands.
= =    Returns Ture if the two operands are equivalent, False otherwise.
!=    Returns Ture if the two operands are not equal, False otherwise.
<=    Returns Ture if the operand on the left is numerically less than or equal to the operand on the right of the operator. Returns False otherwise.
=>    Returns Ture if the operand on the left is numerically greater than or equal to the operand on the right of the operator. Returns False otherwise.
<    Returns Ture if the operand on the left is numerically less than the operand on the right of the operator. Returns False otherwise.
>    Returns Ture if the operand on the left is numerically greater than the operand on the right of the operator. Returns False otherwise.
< = >    Returns -1 if the left operand is less than the right, +1 if is it greater than, and 0(False) otherwise.
&&    Performs a logical AND operation. If the left operand is True m then the right operator is not evaluated.
||    Performs a logical OR operation. If the left operand is True m then the right operator is not evaluated.
&    Returns the valueof the two operators bitwise ANDed.
|    Returns the valueof the two operators bitwise ORed.
^    Returns the valueof the two operators bitwise XORed.
++    Increment operator. Increments the variable's value by 1.
--    Decrement operator. Decrements the variable's value by 1.
**    Computes the power of the left-hand value to the power of the rihght-hand value.
+=    Adds the value of the right-hand operand to the value of the left-hand operand.
-+    Subtracts the value of the right-hand operand to the value of the left-hand operand.
*=    Mlutiplies the value of the left-hand operand to the value of the right-hand operand.
>>    Shifts the left operand right by the number of bits that is specified by the right operand.
<<    Shifts the left operand left by the number of bits that is specified by the right operand.
~    Performs a 1s complement of the operator. This is a unary operator.



关于array的部分:
CODE:

@a=(1,2,3);     # 初始化一个整数数组。
$a=@a;     # 这里表示将数组 @a 的长度赋给 $a,此时 $a 和 @a 不是一个变量,他们不在一个存储空间里,引用时不会发生混淆。
($a, $b, $c)=(1,2,3);     # 这里表示将 1 赋给 $a;2 赋给 $b;3 赋给 $c;
@a=("a","b","c");     # 初始化一个字符串数组。
@b=@a; # 表示把数组 @a 拷贝一份给数组 @b,@a 与 @b 不享有共同的存储空间,他们彼此分离。
@c=(@a,@b);     # 表示数组 @c 拥有 @a 和 @b 的所有元素,仍然是一维数组,而不是发生了嵌套。
($a,@b)=@a;     # 表示变量 $a 等于数组 @a 的第一个元素,@b 拷贝了 @a 的剩余元素。
@a=(); # 表示产生或清空一个数组。
($a)=@b; 变量 $a 等于数组 @b 的第一个元素的值。
@b[ i ] 引用数组 @b 的第i个元素。
$b[ i ] 如果 b 表示一个数组的话,其含义同上。
$a[ i,j ]=[ x,y ] 将数组 @a 的第 i 和第 j 个元素赋值为 x 和 y。
@a[ i,j ]=@a[ j,i ]     将数组 @a 的第 i 和第 j 个元素的值互相交换。




关于哈希(与array区别在于访问方式,array用的是id号,而hash用的是key)
CODE:

%fred=(one,"aka",two,"free"); $a=$fred;     # $a等于"aka"
$b=$fred;     # $b等于"free"
$fred="yes";     # %fred=(one,"aka",two,"yes")
@index=keys(%fred);     # @index=(one,two)
@content=values(%fred);     # @content=("aka","yes")
($index,$content)=echo(%fred);     # 此时 $index 的值为 one,$content 的值为 "aka",再执行一次 $index 为值为 two,$name 的值为 "yes"
@a=%fred;     # 将关联数组 fred 指定给数组 a,这时 @a=(one,"aka",two,"yes")
%b=@a;     # 将数组 a 指定给关联数组 b,这时 %b=(one,"aka",two,"yes")
delete $fred;     # 将关联数组中 key 值为 one 的一对 key-value 删除,这时 %fred=(two,"yes")
%x=();     # 把 %x 关联数组置空



下面再根据运算使用类型介绍一些运算符号:

赋值(Assignment)运算符
CODE:

符号     范例             说明
=     $x=$y;                 将$x的值指派给$y
+=     $x+=$y;   $x=$x+$y;     将$x加$y之后再指派给$x
-=     $x-=$y;    $x=$x-$y;     将$x减$y之后再指派给$x
*=     $x*=$y;    $x=$x*$y;     将$x乘$y之后再指派给$x
/=     $x/=$y;    $x=$x/$y;     求出$x除以$y之后的商数,再指派给$x
**=     $x**=$y;    $x=$x**$y;     将$x乘上$y次方之后再指派给$x
%=     $x%=$y;    $x=$x%$y;     求出$x除以$y的余数以后,再指派给$x
.=     $str1.=$str2;$str1=$str1.$str2;     将$str1这个字符串再加上$str2这个字符串之后,再指派给$str1这个字符串
x=     $strx=$y;    $str=$strx$y;     重复$str字符串$y次,并反结果指派给str这个字符串



算术(Arithmetic)运算符
CODE:

符号     范例     说明
+     $z=$x+$y     将$x和$y相加之后,再将结果指派给$z
-     $z=$x-$y     将$x减掉$y之后,再将结果指派给$z
*     $z=$x*$y     将$x和$y相乘之后,再将结果指派给$z
/     $z=$x/$y     将$x除以$y之后,再将商数指派给$z
%     $z=$x%$y     将$x除以$y之后,再将余数指派给$z
**     $z=$x**$y     将$x乘以$y之后,再将结果指派给$z
++     $x++;++$x;     如同$x=$x++1;将$x加一以后再将结果指派给$x
--     $x--;--$x;     如同$x=$x-1;将$x减一以后再将结果指派给$x
.     $z=$x.$y;     将$x字符串和$y字符串连接之后,再将结果指派给$z



数值(Numeric Values)关系运算符
CODE:

符号     范例     说明
>     $x>$y     如果$x大于$y,返回1的值,否则返回0
>=     $x>=$y     如果$x大于等于$y,返回1的值,否则返回0
<     $x<$y     如果$x小于$y,返回1的值,否则返回0
<=     $x<=$y     如果$x小于等于$y,返回1的值,否则返回0
==     $x==$y     如果$x等于$y,返回1的值,否则返回0
!=     $x!=$y     如果$x不等于$y,返回1的值,否则返回0
<=>     $x<=>$y     如果$x大于$y,返回1的值,如果$x等于$y,否则返回0;&127;如果 $x小于$y,则返回-1的值



字符串(String Values)关系运算符
CODE:

符号     范例     说明
gt     $str1 gt $str2     如果$str1大于$str2,返回1的值,否则返回0
ge     $str1 ge $str2     如果$str1大于等于$str2,返回1的值,否则返回0
lt     $str1 lt $str2     如果$str1小于$str2,返回1的值,否则返回0
le     $str1 le $str2     如果$str1小于等于$str2,返回1的值,否则返回0
eq     $str1 ep $str2     如果$str1等于$str2,返回1的值,否则返回0
ne     $str1 ne $str2     如果$str1不等于$str2,返回1的值,否则返回0
cmp     $str1 cmp $str2     如果$str1大于$str2,返回1的值,如果$str1等于$str2,返回0,如果$str1小于$str2,则返回-1的值



逻辑(Logical)运算

1) $x && $y(And)
CODE:

$x    $y    结果
真(True) 真(True) 真(True)
真(True) 假(False) 假(True)
假(False) 真(True) 假(False)
假(False) 假(False) 假(False)



2) $x || $y(Or)

CODE:

$x    $y    结果
真(True) 真(True) 真(True)
真(True) 假(False) 真(True)
假(False) 真(True) 真(True)
假(False) 假(False) 假(False)



3) $x(Not)
CODE:

$x    结果
真(True) 假(False)
假(False) 真(True)



其它常用的运算符

指令:..区块运算符(Range Operator)

说明:这个运算符是 Perl 语言中特有的运算符,是一个很实用的运算符。

范例:
CODE:

@digits=(1..9); # 此时 @digits=(1,2,3,4,5,6,7,8,9);
@digits=('01'..'05'); # 此时 @digits=(01,02,03,04,05);
@char=('A'..'E'); # 此时 @char('A','B','C','D','E',);
@total=(1..3,'A'..'B'); # 此时 @total=(1,2,3'A','B');



指令: 条件运算符(Conditional Operator)

说明: (判别运算式? 运算式1: 运算式2)这个语法的意义和C语言一样:如果判别运算式的值是真(True)的话,则做运算式 1 的运算;如果判别运算式是假(False)的话,则做运算式 2 的运算。

范例:

$price = ($age>60)? 100:200;
如果 $age 大于60的话,则$price等于100,否则$price等于200。

常用的文件数据(File test)运算符
CODE:

范例     说明
-r $file     如果 $file 是可读取的话,返回 1
-w $file     如果 $file 是可写入的话,返回 1
-x $file     如果 $file 是可执行的话,返回 1
-e $file     如果 $file 存在的话,返回 1
-s $file     返回 $file 的文件大小(bytes)
-f $file     如果 $file 是正常文件的话,返回 1
-T $file     如果 $file 是文本文件的话,返回 1
-B $file     如果 $file 是Binary文件的话,返回 1
-M $file     返回 $file 文件最后一次更改时间到现在的日期数

 
Processed in 0.115777 second(s)