2006-11-11

Perl小技巧:文件操作

来源: 本站收集整理 作者:佚名 评论 0 条
 
useIO::Tee;$tee=IO::Tee->new(">>debuglog.txt",*STDOUT);print$tee"anerrorocurredon".scalar(localtime)."n";
运行结果:anerrorocurredonFriFeb2321:44:202001代码讨论:假如,由于种种原因你想要同时向两个位置写入同一个字符串,这和UNIX下的tee工具的用途一样。即使你不是工作在Unix平台上,Perl也通过Tee模块为你提供这个功能。Tee模块可以在CPAN下载,你应该把它安装到Perl的IO库文件夹中。Tee模块以OOP方式编写,所以使用它之前你应该首先使用它的new方法来创建一个Tee对象,整个过程需要两个参数,每个参数既可以是代表文件句柄的字符串,也可以是一个对已打开的文件句柄的引用。在上面的例子中,我们用一个字符串来代表一个以附加模式打开的文件句柄,它指向名为debuglog.txt的文件,另一个参数是系统内置的文件句柄STDOUT,整个句柄是系统自动创建的,print函数默认情况对它进行操作。为了得到一个文件句柄的引用我们需要对一个typeglob类型的数据使用反斜杠。Typeglob可以代表任何已命名的某个变量,不论它是数组,散列还是标量等。使用*很有必要,因为文件句柄自己没有前缀符号。new操作符返回Tee类的一个实例对象,然后我们把整个实例赋给$tee标量。现在,无论什么时候我们向$tee进行写入操作,我们都同时向两个位置进行写操作。*更多文件操作。。。**从一个文件的完全路径中找出它的名字*
useFile::Basename;$path="/docs/sitecircus.com/tricks/trick.of.the.week.html";$basename=basename($path,".html");print$basename;
运行结果:trick.of.the.week代码讨论:好了,成功了。问题是要找出文件的名字,要不带任何路径前缀,不带任何扩展名。File::Basename模块可以使这很轻易实现,我们只需要把文件的完全路径还有要剔除的扩展名传给它。上面的path变量是文件的完全路径,注重文件分隔符是/,这个字符很非凡,因为它是操作系统的保留字符。这里你不能在文件名里使用系统的分隔符。你应该知道当今流行的操作系统都使用自己独特的文件分隔符:Unix使用/,Windows使用,Macintosh使用:(顺便说一下,在Windows上的Perl脚本中,你既可以使用也可以使用/作为文件分隔符,Perl的解释器能理解你的意思)。File::Basename,当然,能正确在完全路径中找到文件名,不论时在什么系统下。*改变文件的所有者*
($uid,$gid)=(getpwnam($username))[2,3]ordie"$usernotinpasswdfile";chown($uid,$gid,$file)orwarn"couldn'tchown$file.";
运行结果:无输出代码讨论:有的时候,你可能知道一个用户名,而你想用这个用户名做些事,比如改变一个文件的所有者。但是不幸的是,Perl的chown命令不能接受用户名作为参数,但是可以接受一对数字:userid和groupid。虽然有这些不便之处,Perl并没有让我们陷入困境,我们可以把用户名作为getpwnam函数的参数,获得一个数组,里面包含了用户名对应的userid和groupid,分别对应着数组里的第二和第三个元素。


共2页: 上一页 [1] 2 下一页
(本文仅表明作者个人观点,不代表本站及其管理员立场.) 推荐 收藏 投稿 打印 返回 关闭
上一篇:超越模板引擎  
下一篇:如何使用strict和warnings
    评论加载中…
 推荐文章
     

网站首页  -  网站地图 -   站长论坛  -  网站投稿  -    -  网站管理
Copyright © 2008 芜湖站长站 All Rights Reserved 皖ICP备07500611号