[PerlChina] 文件描述符如何同时读写( 以不使用<>的方式更新文件 )

agentzh agentzh at gmail.com
Sun Dec 7 03:34:15 PST 2008


2008/12/7 owen nirvana <freeespeech at gmail.com>

> 我想批量替换某些文件的内容,按照learning perl 的方法可以从命令行读入,但是这种情况似乎并不适用于目录嵌套的情况,
>

在 *NIX 下,我一般会这么写:

$ find /some/dir -name '*.foo' | xargs ./my-script.pl

对于常见的正则可以搞定的批量替换,我一般会直接使用 sed -i 's/foo/bar/g',必要时辅之以 find 命令 :)

如果希望 native Win32 也好使,使用 File::Find 挺好的,呵呵。如果自己用 opendir/readdir 啥的遍历目录树。

文件的修改,通常的做法是,先读取文件 foo,然后把修改后的写到一个临时文件中,写完之后,再把临时文件覆盖掉原始文件 foo。

如果 foo 不是很大,可以一口气先读到 RAM 中来,关闭掉读句柄,再以写方式打开 foo,把东西再写进 foo
文件里。但这种方法存在丢数的风险,假设程序在写 foo 的过程中掉电,或者被 Ctrl-C
了,那么我们就丢失了数据。所以对于比较严肃的事情,一般不推荐,呵呵 :)

Bye,
-agentzh
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/china-pm/attachments/20081207/8533705f/attachment.html>


More information about the China-pm mailing list