perl中的“引用”一、引用简介 二、使用引用 三、使用反斜线()操作符 四、引用和数组 五、多维数组 六、子程序的引用七、数组与子程序 八、文件句柄的引用 一、引用简介 引用就是指针,可以指向变量、数组、哈希表(也叫关联数组)甚至子程序。pascal或c程序员应该对引用(即指针)的概念很熟悉,引用就是某值的地址,对其的使用则取决于程序员和语言的规定。在perl中,可以把引用称为指针,二者是通用的,无差别的。引用在创建复杂数据方面十分有用。 perl5中的两种引用类型为硬引用和符号引用。符号引用含有变量的名字,它对运行时创建变量名并定位很有用,基本上,符号引用就象文件名或unix系统中的软链接。而硬引用则象文件系统中的硬链接。 perl4只允许符号引用,给使用造成一些困难。例如,只允许通过名字对包的符号名哈希表(名为_main{})建立索引。perl5则允许数据的硬引用,方便多了。 硬引用...
十、用关联数组创建数据结构 用关联数组可以模拟在其它高级语言中常见的多种数据结构,本节讲述如何用之实现:链表、结构和树。 2、结构 许多编程语言可以定义结构(structure),即一组数据的集合。结构中的每个元素有其自己的名字,并通过该名字来访问。 perl不直接提供结构这种数据结构,但可以用关联数组来模拟。例如模拟c语言中如下的结构: struce{ int field1; int field2; int field3; }mystructvar; 我们要做的是定义一个含有三个元素的关联数组,下标分别为field1、field2、field3,如: %mystructvar = ("field1" , "" , "field2" , "" , "field3" , "" ,); 像上面c语言的定义一样,这个关联数组%mystrctvar有三个元素,下标分别为field1、field2...
十、用关联数组创建数据结构 用关联数组可以模拟在其它高级语言中常见的多种数据结构,本节讲述如何用之实现:链表、结构和树。 1、(单)链表 链表是一种比较简单的数据结构,可以按一定的次序存贮值。每个元素含有两个域,一个是值,一个是引用(或称指针),指向链表中下一个元素。一个特殊的头指针指向链表的第一个元素。 在perl中,链表很容易用关联数组实现,因为一个元素的值可以作为下一个元素的索引。下例为按字母顺序排列的单词链表: %words = ("abel", "baker", "baker", "charlie", "charlie", "delta", "delta", ""); %24header = "abel"; 上例中,简单变量%24header含有链表中第一个单词,它同时也是关联数组第一个元素的下标,其值baker又是下一个元素的下标,依此类推。 下标为delta的最后一个元素的值为空串...
六、从数组变量复制到关联数组 与列表一样,也可以通过数组变量创建关联数组,当然,其元素数目应该为偶数,如: @fruit = ("apples",17,"bananas",9,"oranges","none"); %fruit = @fruit; 反之,可以把关联数组赋给数组变量,如: %fruit = ("grapes",11,"lemons",27); @fruit = %fruit; 注意,此语句中元素次序未定义,那么数组变量@fruit可能为("grapes",11,"lemons",27)或("lemons",27,"grapes",11)。 关联数组变量之间可以直接赋值,如:%fruit2 = %fruit1; 还可以把数组变量同时赋给一些简单变量和一个关联数组变量,如: (%24var1, %24var2, %myarray) = @list; 此语句把@list的第一个元素赋给%24v...
四、增加元素 创建一个关联数组元素最简单的方法是赋值,如语句%24fruit{"bananas"} = 1; 把1赋给关联数组%fruit下标为bananas的元素,如果该元素不存在,则被创建,如果数组%fruit从未使用过,也被创建。 这一特性使得关联数组很容易用于计数。下面我们用关联数组改写上面的程序,注意实现同样的功能此程序简化了许多。 1 : #!/usr/local/bin/perl 2 : 3 : while (%24inputline = ) { 4 : while (%24inputline =~ /b[a-z]s+/g) { 5 : %24word = %24&; 6 : %24word =~ s/[;.,:-]%24//; # remove punctuation 7 : %24wordlist{%24word} += 1; 8 : } 9 : } 10: print ("capitalized...
一、数组变量的限制 在前面讲的数组变量中,可以通过下标访问其中的元素。例如,下列语句访问数组@array的第三个元素: %24scalar = %24array[2]; 虽然数组很有用,但它们有一个显著缺陷,即很难记住哪个元素存贮的什么内容。假如我们来写一个程序计算某文件中首字母大写的单词出现的次数,用数组来实现就比较困难,程序代码如下: 1 : #!/usr/local/bin/perl 2 : 3 : while (%24inputline = ) { 4 : while (%24inputline =~ /b[a-z]s+/g) { 5 : %24word = %24&; 6 : %24word =~ s/[;.,:-]%24//; # remove punctuation 7 : for (%24count = 1; %24count <= @wordlist; 8 : %24count++) { 9 : %24...
六、递归子程序 perl中,子程序可以互相调用,其调用方法与上述相同,当调用该子程序本身时,即成了递归子程序。递归子程序有两个条件:1、除了不被子程序改变的变量外,所有的变量必须的局部的;2、该子程序要含有停止调用本身的代码。 七、用别名传递数组参数 1、用前面讲到的调用方法&my_sub(@array)将把数组@array的数据拷贝到子程序中的变量@_中,当数组很大时,将会花费较多的资源和时间,而用别名传递将不做这些工作,而对该数组直接操作。形式如: @myarray = (1, 2, 3, 4, 5); &my_sub(*myarray); sub my_sub { my (*subarray) = @_; } 2、此方法类似于c语言中的传递数组的起始地址指针,但并不一样,在定义数组的别名之后,如果有同名的简单变量,则对该变量也是起作用的。如: %24foo = 26; @...
一、定义 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。perl中,子程序可以出现在程序的任何地方。定义方法为: sub subroutine{ statements; } 二、调用 调用方法如下: 1、用&调用 &subname; ... sub subname{ ... } 2、先定义后调用 ,可以省略&符号 sub subname{ ... } ... subname; 3、前向引用 ,先定义子程序名,后面再定义子程序体 sub subname; ... subname; ... sub subname{ ... } 4、用do调用 do my_sub(1, 2, 3);等价于&my_sub(1, 2, 3); 三、返回值 缺省的,子程序中最后一个语句的值将用作返回值。语句return (retval);也可以推出子程序并...
一、条件判断 if ( ) { } elsif ( ) { } ... else{ } 二、循环: 1、while循环 while ( ) { } 2、until循环 until ( ) { } 3、类c的for循环 ,如 for (%24count=1; %24count <= 5; %24count++) { # statements inside the loop go here } 下面是在for循环中使用逗号操作符的例子: for (%24line = , %24count = 1; %24count <= 3; %24line = , %24count++) { print (%24line); } 它等价于下列语句: %24line = ; %24count = 1; while (%24count <= 3) { print (%24line); %24line = ; %24count++; } 4、针对列表(数...
3、列表范围: (1..10) = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) (2, 5..7, 11) = (2, 5, 6, 7, 11) (3..3) = (3) .用于实数 (2.1..5.3) = (2.1, 3.1 ,4.1, 5.1) (4.5..1.6) = () .用于字符串 ("aaa".."aad") = ("aaa","aab", "aac", "aad") @day_of_month = ("01".."31") .可包含变量或表达式 (%24var1..%24var2+5) .小技巧: %24fred = "fred"; print (("hello, " . %24fred . "!n") x 2); 其结果为: hello, fred! hello, fred! 4、数组的输出: (1) @array = (1, 2, 3); print (@arra...
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器