perl 编程基础

来源:互联网 发布:淘宝客服骂人投诉电话 编辑:程序博客网 时间:2024/05/21 04:39

Perl:General@

-------------------------------------------------------
在 Perl 中没有全局变量这样的东西,像$_ 和 SIG,只是看上去像全局变量,因为它们缺省时属于 main 包,而不是当前包;

所有的标识符,包括用 our 声明的,但是不包括用 my 或者用其它包名字限定的变量都将放到属于当前包的符号表中。

my 声明的变量独立于包,总是属于包围它们的闭合作用域。
-------------------------------------------------------

1.1.1                            Gen_execute

Windows:

1 >> perl sample.pl

2 >> sample.pl

Unix:

1 >> perl sample.pl

2 >>  chmod 0777 sample.pl

   >>  sample.pl

直接包含在命令行中的程序,通过-e 开关指定:

>> perl –e “print ‘hello world !’”

1.1.2                            Gen_运行_编译_调试

>> sample.pl –w “%f”    # 运行

>> sample.pl –w –c “%f”  # 编译

>> sample.pl –w –d “%f”   # 调试


perl -Mdiagnostics ./my_program

使用命令行选项 -M 来控制,在需要时加载 diagnostics 编译命令。


1.1.3                            Gen_变量_variable

-perl 中的变量不用声明,可以直接使用。但是声明变量有助于查错,是一种良好的编程习惯。

         

1.1.4                            Gen_引用

创建:使用反斜杠操作符创建引用,相当于C语言的&

$numref = \42;

$mesref = \”hello ref”;

 [..]{..}创建一个指向数组和hash的引用,他们创建一个自己的内容的副本,并返回指向它的一个引用,所以与\操作符不一样。

@array = [1,2,3,4];

@copyhasref = {%hash};

访问:$相当于C中的*用于访问引用指向的值。

标量引用:

数组引用:

哈希引用:

代码引用:

 

通过ref函数返回引用的类型。

>print “ref type”.ref($ref);

 

1.1.5                            Gen_常量

标量常量:

列表常量:

哈希常量:

Gen_常量

1.1.6                            Gen_操作符

赋值操作符:

                      %x = (‘Red’=>20,’Green’=>40,’Blue’=>10);

算术操作符:

                       /, 取余 %

字符操作符:

                      连接操作符“.”,复制操作符x

                      $example = ‘Hello’.’World’;

                      $example = “ab”x3; #ababab

                      @array = (a,b,c)x2; #(a,b,c,a,b,c);

比较操作符:

                      数字比较:<, >, ==, <=, >=, !=, <=>(比较两个值,返回0,1-1)

                      字符串比较:lt, gt, eq, le, ge, ne, cmp(比较两个值,返回0,1-1)

逻辑操作符:

                      !逻辑非, || 逻辑或, && 逻辑与,逻辑异或,

位操作符:

                      & | ~(位非),位异或, << 左移, >> 右移

递增和递减操作符:

                      ++ --

箭头操作符

                                           两种用法:

                                           1 访问引用中的数据元素

                                           $array_element = $arrayref -> [1];

                                           $hash_element = $hashref -> {$key};

                                           2 在对象中使用,通过它来调用一个对象(或实例)的方法。

                                           $object -> method(@arguments);

                                           三元操作符:

                                                                <condition>?<true-result>:<false-result>;

1.1.7                            Gen_文件与目录

Perl程序是通过文件句柄来进行I/O操作的。

缺省的文件句柄:

STDIN:标准输入,

STDOUT:标准输出

STDERR:标准错误输出。

1.1.8                            Gen_写文件

$append = 0;

If ($append)

{

open (MYOUTFILE, “>filename.out”); #覆盖写

}

else

{

open (MYOUTFILE, “>>filename.out”); #追加写

}

print MYOUTFILE “Timestamp:” ; #写文本,没有换行。

print MYOUTFILE timestamp();    #把函数返回值写到文本。

print MYOUTFILE “\n”;                 #写换行符

#*****打印自由文本,需要后面的分号***#

print MYOUTFILE << “MyLabel”;

Steve was here

and now is gone

but left his na

to carry on.

MyLabel

#关闭文件

close (MYOUTFILE);

1.1.9                            Gen_读文件

#读文件——单行

open (MYINPUTFILE, “<filename.out”);

while(<MYINPUTFILE>)

{

                      my ($line) = $_;  #存下$_的值,方便操作。

                      chomp($line);     # 把结尾的换行符去掉。

                      $line  =~ tr/[a-z]/[A-Z]/; #小写转换为大写。

                      print “$line\n”;

}

#读文件——多行

open (MYINPUTFILE, “<filename.out”);

my(@lines) = <MYINPUTFILE>;  #把文件内容一次性读到数组。

@lines = sort(@lines); #把数组排序。

foreach my $line (@lines)

{

                      print  “$line”;

}

close(MYINPUTFILE);

1.1.10                        Gen_文件_其他

删除文件:

unlink(‘c:/test.txt’);                     #删除文件test.txt.

unlink”cowbird”,”starling”;

unlink <*.o> ;                             如同shell命令rm *.o

 

重命名

rename(“fred”,”barney”) \\ die “Can’t rename fred to barney:$!”;

 

创建目录:

mkdir(“gravelpit”, 0777)  \\die “Can’t mkdir gravelpit:$!”;

 

删除目录:

rmdir(“gravelpit”) \\ die “cannot rmdir gravelpit: $!”;

1.1.11                        Gen_例程(函数)_subroutine

例程,是结构化程序设计的基础,它接受多个输入参数,返回一个输入参数。

定义语法:

sub Subroutine_name[ () ]

{

                      sequence_of_statements;

}

 

传递参数给例程是通过特殊变量@_完成的。

sub Logger($)

{

                      ($line) = @_;

                      Print “$line\n”;

}

 

sub Logger($)

{

                      $line = shift; #通过shift函数访问输入参数

                      Print “$line\n”;

}

1.1.12                        Gen_执行命令

执行操作系统命令的方法有如下几种:

1 system

my $ret = system($cmd);

if ($ret != 0)

{

die "error during execute $cmd\n  extend_error=$^E \n errorno= $!\n  " ;

}

 

反小点引号 `` 或者 qx

注意:反小点引号在~符号的下面,并不是单引号。

 

3 WScript.Shell (windows)

$WshShell = Win32:OLE->new(“WScript.Shell”);

$WshShell -> Run(“$ls_cmd”);

 

4 Win32:Spawn (windows)

my $cmd = ‘c:\windows\notepad.exe’;

my $args = ‘notepad.exe c:\my documents\test.txt’;

my $pid = 0;

Win32::Spawn($cmd, $args, $pid) or die

Win32::FormatMessage(Win32::GetLastError());

 

5 Win32:Process (windows)

Win32::Process::Create($process, $program, $comd, $handle $option, $dir);

 

另外还可以通过Net::Telnet 模块,远程执行命令。

0 0