perl学习

1.变量方式与php类似
2.perl 逻辑操作符
  逻辑或:$a || $b 或 $a or $b
  逻辑与:$a && $b 或 $a and $b
  逻辑非:! $a 或 not $a
  逻辑异或:$a xor $b

  这个比较奇怪,即有类似c++,php的比较方式,又有类似fortran,basic的方式

  3.数组
  php  $arr=array("one","two","three");
  perl  @array=("one","two","three");
下列语句访问数组@array的第三个元素:
    $scalar = $array[2];


4.文件
php  hd=fopen(fname,"rw");
perl open(FILE1,"file1");
perl读文件
$line = <MYFILE>;//读一行
@array = <MYFILE>;//读所有行

perl写文件
   open (MESSAGE, "| mail dave");
    print MESSAGE ("Hi, Dave! Your Perl program sent this!/n");
    close (MESSAGE);

5.正则
php :
  if(!empty($varname) && preg_match('/^/$[A-Za-z][_0-9a-zA-Z]*$/',$varname,$match)) return true;
perl:
 if ($varname =~ /^/$[A-Za-z][_0-9a-zA-Z]*$/) {
       print ("$varname is a legal scalar variable/n");
     } elsif ($varname =~ /^@[A-Za-z][_0-9a-zA-Z]*$/) {
       print ("$varname is a legal array variable/n");
     } elsif ($varname =~ /^[A-Za-z][_0-9a-zA-Z]*$/) {
       print ("$varname is a legal file variable/n");
     } else {
       print ("I don't understand what $varname is./n");
    }

6.循环
类php的for循环 ,如
  for ($count=1; $count <= 5; $count++) {
    # statements inside the loop go here
  }

  7.foreach
  php :
  foreach($arr as $key=>$var) echo $var['name'];
  perl:
    @list = (1, 2, 3, 4, 5);
  foreach $temp (@list) {
    if ($temp == 2) {
      $temp = 20;
    }
  }

  8.这个设计比较奇怪
 单行条件
  语法为statement keyword condexpr。其中keyword可为if、unless、while或until,如:
    print ("This is zero./n") if ($var == 0);
    print ("This is zero./n") unless ($var != 0);
    print ("Not zero yet./n") while ($var-- > 0);
    print ("Not zero yet./n") until ($var-- == 0);
  虽然条件判断写在后面,但却是先执行的。

  9.子程序
  php:
  function mysub($str)
  {
  return $str;
  }
perl:
 sub subroutine{
    statements;
  }

  用&调用
  &subroutine;

  前向引用 ,先定义子程序名,后面再定义子程序体
  sub subname;
  ...
  subname;
  ...
  sub subname{
    ...
  }
10.用别名传递数组参数
(1)、用前面讲到的调用方法&my_sub(@array)将把数组@array的数据拷贝到子程序中的变量@_中,当数组很大时,将会花费较多的资源和时间,而用别名传递将不做这些工作,而对该数组直接操作。形式如:
  @myarray = (1, 2, 3, 4, 5);
  &my_sub(*myarray);
  sub my_sub {
    my (*subarray) = @_;
  }
(2)、此方法类似于C语言中的传递数组的起始地址指针,但并不一样,在定义数组的别名之后,如果有同名的简单变量,则对该变量也是起作用的。如:
  $foo = 26;
  @foo = ("here's", "a", "list");
  &testsub (*foo);
  ...
  sub testsub {
    local (*printarray) = @_;
    ...
    $printarray = 61;
  }

11.
perl:
注:关联数组总是随机存贮的,因此当你用keys()访问其所有元素时,不保证元素以任何顺序出现,特别值得一提的是,它们不会以被创建的顺序出现。
    要想控制关联数组元素出现的次序,可以用sort()函数对keys()返回值进行排列,如:
foreach $capword (sort keys(%wordlist)) {
  print ("$capword: $wordlist{$capword}/n");
}

php:同理,php中
foreach( $arr as $key=>$var)
{}
//不保证元素以任何顺序出现,不会以录入次序出现。要想按顺序,则需要用asort arsort排序

12.
perl:
注:用列表给关联数组赋值时,Perl5允许使用"=>"或","来分隔下标与值,用"=>"可读性更好些,上面语句等效于:
    %fruit = ("apples"=>17,"bananas"=>9,"oranges"=>"none");
php:
$arr = array("apples"=>17,"bananas"=>9,"oranges"=>"none");

13.
perl:
用关联数组循环
    前面已经出现过利用keys()函数的foreach循环语句,这种循环效率比较低,因为每返回一个下标,还得再去寻找其值,如:

foreach $holder (keys(%records)){
  $record = $records{$holder};
}
    Perl提供一种更有效的循环方式,使用内嵌函数each(),如:

%records = ("Maris", 61, "Aaron", 755, "Young", 511);
while (($holder, $record) = each(%records)) {
  # stuff goes here
}
each()函数每次返回一个双元素的列表,其第一个元素为下标,第二个元素为相应的值,最后返回一个空列表。
    注意:千万不要在each()循环中添加或删除元素,否则会产生不可预料的后果。

$holder:下标 $record:相应的值

14.pringf 与php一样
perl:
printf("The number I want to print is %d./n", $number);
php:
printf("The number I want to print is %d./n", $number);

15.引用
perl:使用反斜线(/)操作符
    反斜线操作符与C语言中传递地址的操作符&功能类似。一般是用/创建变量又一个新的引用。下面为创建简单变量的引用的例子:
#!/usr/bin/perl
$value = 10;
$pointer = /$value;
printf "/n Pointer Address $pointer of $value /n";
printf "/n What Pointer *($pointer) points to $$pointer/n";
    结果输出如下:

Pointer Address SCALAR(0x806c520) of 10
What Pointer *(SCALAR(0x806c520)) points to 10

php:
$a="ABC";
$b =&$a;
echo $a;//这里输出:ABC
echo $b;//这里输出:ABC

16.

php :
class test
{
private $ddd;
function subf(){}
}
 
 $t = new test();

 perl:
  首先,创建一个名为Cocoa.pm的包文件(扩展名pm是包的缺省扩展名,意为Perl Module)。一个模块就是一个包,一个包就是一个类。在做其它事之前,先加入“1;”这样一行,当你增加其它行时,记住保留“1;”为最后一行。这是Perl包的必需条件,否则该包就不会被Perl处理。下面是该文件的基本结构。

package Cocoa;

#
# Put "require" statements in for all required,imported packages
#

#
# Just add code here
#
sub new {      #构造函数
  my $this = {}; # Create an anonymous hash, and #self points to it.
  bless $this; # Connect the hash to the package Cocoa.
  return $this; # Return the reference to the hash.
}

1; # terminate the package with the required 1;


1 #!/usr/bin/perl
2 push (@INC,'pwd');
3 use Cocoa;
4 $cup = new Cocoa;
$cup = cocoa->new();


17. 在包间切换
perl:
$var = 14;
package mypack;
$var = 6;
    第一个语句创建变量$var并存贮在main符号表中,第三个语句创建另一个同名变量$var并存贮在mypack包的符号表中。

    在程序里可以随时在包间来回切换,如:

1: #!/usr/local/bin/perl
2:
3: package pack1;
4: $var = 26;
5: package pack2;
6: $var = 34;
7: package pack1;
8: print ("$var/n");
    运行结果如下:

$ program
26
$
18.进程启动函数
perl:
函数名 eval
调用语法 eval(string)
解说 将string看作Perl语句执行。
正确执行后,系统变量$@为空串,如果有错误,$@中为错误信息。
例子 $print = "print (/"hello,world//n/");";
eval ($print);
结果输出 hello, world

与php一样

 

19.重点记忆

函数名fork
调用语法procid = fork();
解说创建程序的两个拷贝--父进程和子进程--同时运行。子进程返回零,父进程返回非零值,此值为子程序的进程ID号。
例子$retval = fork();
if ($retval == 0) {
  # this is the child process 执行子进程内容
  exit; # this terminates the child process
} else {
  # this is the parent process 执行父进程内容
}
结果输出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值