奇趣技术网 收藏本站
设为主页
商务合作
首页 新闻中心 行业动态 软件新闻 安全资讯 病毒预警 漏洞发布 操作系统 Dos Win9x Win2000 WinXP Win2003 WinVista Linux Unix
数据库 DB2 Access MSSQL MySQL Oracle Sybase 编程技术 ASP PHP JSP CGI/Perl XML .Net C/C++/C# VB VC Delphi Java 汇编
安全技术 安全教学 工具介绍 漏洞利用 病毒防范 入侵检测 防火墙 安全防范 汉化破解 攻击实例 加密解密 技术论坛
中华网络安全联盟 >> 程序开发 >> Perl >> Perl的经典用法
程序开发
Asp
PHP
JSP
CGI/Perl
XML
.Net
C/C++/C#
Visual Basic
Visual C++
Delphi
Java
汇编语言
  • LB5000XP论坛配合SERV

  • 获取随机的由大小写字

  • Perl操作Mysql数据库

  • Perl在NT下的快速简便

  • 用Perl制作页面计数器

  • 用Perl语句来代替常用

  • 用 perl 实现文件上传

  • perl 域名查询程序

  • Perl的经典用法
    字体:

    中华网络安全联盟    作者:佚名    来源:网络转载    时间:2006-3-21


    用Open() 函数打开文件

    打开文件的常用方法是:

    open(FH, "< $filename")

    or die "Couldn't open $filename for reading: $!";

    open() 函数通常带有两个参数,第一个为文件句柄,用于指向打开的文件,第二个参数是文件名及模式(文件的打开模式)的混合体,如果文件被成功打开,open()函数返回true,否则为false。我们用“or”来测试该条件。

    上述代码中的模式由小于字符(<)来表示。如果文件不存在,open()将返回false。此时,你可以读文件句柄,但不可以写。

    大于字符表示写。如果文件不存在,就会被创建。如果文件存在,文件被清除,以前的数据将会丢失。你可以写入文件句柄,但不可以读入。

    # 如果文件不存在,就创建它

    open(FH, "> $filename")

    or die "Couldn't open $filename for writing: $!";

    如果文件不存在,添加模式(用两个大于符号表示)可以用来创建新文件,如果文件存在,该模式并不会清除原来的数据。

    同“<”或“读”模式一样,你只能对文件句柄进行写操作。 (所以的写入内容都添加到文件尾)。企图进行读操作,会产生运行错误。

    open(FH, ">> $filename")

    or die "Couldn't open $filename for appending: $!";

    通过“+<”模式,你可以既可以读文件,又可以写文件。你可以通过tell() 函数在文件内部移动,通过seek()函数进行定位。如果文件不存在,就会被创建。如果文件已经存在,原来的数据不会被清除。

    如果你打算清除原来的文件内容,或者自己调用truncate() 函数,或者使用“+>”模式。

    open(FH, "+> $filename")

    or die "Couldn't open $filename for reading and writing: $!";

    注意“+<”和“+>”的区别,两者都可以可读可写。前者为非破坏性写,后者为破坏性写。

    错误

    错误是如何出现的?很多地方都会出现错误:如目录不存在,文件不可写入,你的程序丢失了文件句柄等等。

    你应该检查系统调用的结果 (如open() 和sysopen()),看看是否调用成功。

    为了帮助用户查错,通常使用“or die()”,你应记住这些用法。首先,应写出系统调用失败(“open”)的信息。其次,应写出文件名的信息,以便修正错误时更容易地定位。第三,要写出打开文件的方式, (“for writing,”“for appending”)。第四,输出操作系统的出错信息(包含在$!中)。这样,一旦出现文件不能打开的问题,使用你的程序的用户会大体上知道为什么不能打开。有时,我们把第一个和第三个合并在一起:

    or die "unable to append to $filename: $!";

    如果在open() 和出错信息中都写了文件的全名,你会冒改变了open() 的风险,使得出错信息不合时宜或不正确。

    # 下面会出现虚假的出错信息

    open(FH, "</var/run/file.pid")

    or die "Can't open /var/log/file.pod for writing : $!";

    用 Sysopen()进行更多的控制
    为了更好的控制文件的打开方式,可以使用 sysopen() 函数:

    use Fcntl;

    sysopen(FH, $filename, O_RDWR|O_CREAT, 0666)

    or die "Can't open $filename for reading/writing/creating : $!";

    函数 sysopen() 带有四个参数,第一个是同open()函数类似的文件句柄参数,第二个参数是不带模式信息的文件名,第三个参数是模式参数,由Fcntl 模块提供的逻辑OR运算组合起来的常数构成,第四个参数(可选),为八进制属性值(0666表示数据文件, 0777表示程序)。如果文件可以被打开,sysopen() 返回true,如果打开失败,则返回false。

    不同于open()函数,sysopen()不提供模式说明的简写方式,而是把一些常数组合起来,而且,每个模式常数有唯一的含义,只有通过逻辑OR运算才能将它们组合起来,你可以设置多个行为的组合。

    O_RDONLYRead-only

    O_WRONLY Write-only

    O_RDWR Reading and writing

    O_APPEND Writes go to the end of the file

    O_TRUNC Truncate the file if it existed

    O_CREAT Create the file if it didn't exist

    O_EXCLError if the file already existed (used with O_CREAT)

    当你需要小心行事的时候,就使用sysopen() 函数,例如,如果你打算添加内容到文件中,如果文件不存在,不创建新文件,你可以这样写:

    sysopen(LOG, "/var/log/myprog.log", O_APPEND, 0666)

    or die "Can't open /var/log/myprog.log for appending: $!";

    字体:
     
    设为主页 收藏本站 联系我们 友情连接 商务合作 网友留言
    Copyright©2006-2008 中华网络安全联盟 All rights reserved.