首页|操作系统|软件开发|网页制作|媒体动画|数据库|ASP教程|ASP.NET教程|PHP教程|JSP教程|XML教程|建站资料|软件学院|行业资讯|平面设计|网络安全|晒IT论坛|IT人才
  位置: 晒IT >> 软件开发 >> Perl编程教程 >> 正文
 
 
perl常问问题集--第七篇
perl常问问题集--第七篇
 
 

目录 
篇名 
概述 
我能拿到 Perl的 BNF/yacc/RE吗? 
$@%*这些符号是什麽意思?我怎麽知道何时该使用他们呢? 
字串加引号或使用分号及逗号是否绝对必要/还是完全没必要? 
我如何跳过一些传回值? 
我如何暂时滤掉警告讯息? 
什麽是一个扩充 (extension)? 
为何 Perl运算子的优先顺序和 C的不一样? 
我如何宣告/生成一个资料结构 (structure)? 
我如何创造出一个模组 (module)? 
我如何创造一个类别 (class)? 
我如何辨别一个变数是否被污染了(tainted)? 
闭包 (closure)是啥? 
何谓变数自杀而我又该如何防止它? 
我如何传递/传回一个 {函数,档案把手,阵列,杂凑阵列,方法,和正规表现式}? 
我如何生成一个静态变数? 
动态与文字式(静态)范围界定 (scoping)有何不同? Local()和 my()呢? 
当同一个范围中有一个文字式变数时,我该如何去撷取同名的动态变数? 
所谓深连结与浅连结 (deep and shallow binding)间有何不同呢? 
为何 "local($foo) = ;"无法正确地作用? 
我如何重新定义一个内建函数、运算子或是方法? 
用 &foo和 foo()的方式来呼叫一个函数有什麽不同? 
我如何作一个 switch或 case叙述? 
我如何抓到呼叫未定义变数/函数/方法的事件? 
为什麽我的程式会找不到放在同一档案中的方法 (method)呢? 
我如何找出目前所在的 package为何? 
我如何将一大块 perl程式码变成注解? 
作者与版权事宜 

--------------------------------------------------------------------------------

篇名 
perlfaq7 - Perl语言相关问题 ($(原文版 Revision: 1.18, Date: 1997/04/24 22:44:14 中译版 $Revision: 1.1 $ $Date: 1998/01/16 23:57:56 $) 


--------------------------------------------------------------------------------

概述 
本篇内的问题主要是不适合纳入其他篇章的一般性 Perl语言问题。 


--------------------------------------------------------------------------------

我能拿到 Perl的 BNF/yacc/RE吗? 
不行,引用 Chaim Frenkel的话:“Perl的语法无法被简化到可以用 BNF 表示。解析Perl的工作是分散於 yacc、lexer、烟雾和镜子之间。” 


--------------------------------------------------------------------------------

$@%*这些符号是什麽意思?我怎麽知道何时该使用他们呢? 
他们都是指定形态 (type)用的符号,如同 perldata里所详述的: 

    $纯量值 (scalar) (数字,字串或参考值 [reference])
    @阵列
    %杂凑阵列 (关连阵列)
    *代表同一个变数名的所有类形。在第四版中它们常用来达到指标
        (pointers)的功能,但现在在新版的 perl中这个角色已被参
考值 (reference)取代了。

虽然这些符号在某些场合下可省略,但建议你随处都用。 

有些其他的符号你可能会碰到但却不是指定形态用的有: 

    <>这是用来从一个档案把手 (filehandle)里输入一份记录
    \取某样东西的参考值 (reference)

注意 < FILE> 不是用来指定档案的形态,亦非此把手的名字。它只是 将<>这个运算子用在 FILE这个把手上。在纯量的情境 (scalar context) 下,它自 FILE 把手一次读入一行 (嗯,该说一笔记录,参看 $/),在序列情境 (list context)下,则一次将 全部的内容读 入。当对档案使用开、关或其它 <>之外的动作、或甚至只是提到把 手时,切记不要使用 <>。下面的用法是正确的:eof(FH) , seek(FH, 0,2) 以及 ``copying from STDIN to FILE''。 


--------------------------------------------------------------------------------

字串加引号或使用分号及逗号是否绝对必要/还是完全没必要? 
通常一个没有冠上形态符号的字 (bareword)是不需被纳入引号里的,但在大多数 的情况下或许该这麽做 (在use strict下则是必须的)。但由一个简单的字(不 能是一个已定义的副函数之名称)所构成的索引值,和 =>左端的运算子,都会被视为已纳入引号了: 

这些是和这些一样的
    ------------            ---------------
    $foo{line}              $foo{"line"}
    bar => stuff            "bar" => stuff

一个区块末端的分号可有可无,一个序列的最後一个逗号亦同。良好的写作风格 (参看perlstyle)中建议除了在单行程式 (one-liners)的情况外都将他们加上去: 

    if ($whoops) { exit 1 }
    @nums = (1, 2, 3);

    if ($whoops) {
        exit 1;
    }
    @lines = (
        "There Beren came from mountains cold",
        "And lost he wandered under leaves",
    );


--------------------------------------------------------------------------------

我如何跳过一些传回值? 
一种方法是将传回值当作序列来对待,然後用索引来指名其中的某个位置: 

        $dir = (getpwnam($user))[7];

另一种方法就是在等号左端用 undef 作元素: 

    ($dev, $ino, undef, undef, $uid, $gid) = stat($file);


--------------------------------------------------------------------------------
[1] [2] [3] [4] [5] [6] [7] [8]  下一页
  • 上一篇: perl常问问题集--第八篇
  • 下一篇: perl常问问题集--第六篇
  •  告诉好友  打印此文 关闭窗口 返回顶部
     
    热点文章
     
     
    推荐文章
     
     
    相关文章

    | 设为首页 | 加入收藏 | 联系我们 | 友情链接 | 诚聘英才 |
    Copyright© 2008 ShaiIT.Com .All Rights Reserved
    下载alexa工具,提升您的网站排名