Feb 20 2008

perl 把字符串当作文件

Category: 技术ssmax @ 14:10:17

把字符串当作文件

提出问题

现在你手头上有的是字符串,但是你想把它作为一个文件来处理。例如,有一个子函数,它的参数为文件句柄,但是你想这个函数直接作用于你的字符串,而你不想把字符串写入一个文件。

解决方案

用 Perl 5.8 版中的 I/O 标量:

open($fh,"+<",\\$string); # 从 $string 中读取数据

讨论

Perl 的输入输出层支持把数据存入标量及从标量中取出数据。像上面,当你用 <$fh> 语句读取一条记录的时候,你读的是 $string 中所存储数据的下一行。当你用 print 函数向 $string 中写入数据时,你会改变 $string 中现有的数据。你可以把 $fh 传递给一个参数为文件句柄的函数,而那个函数将不会知道它实际在处理字符串而不是文件。

Perl 也能以各种不同的方式来打开字符串,所以,你可以用只读、覆盖、追加等方式打开:

open($fh, "<", \\$string);  # 只读方式打开字符串
open($fh, ">", \\$string);  # 先清空字符串,然后字符串只写
open($fh, "+>", \\$string);  # 先清空字符串,字符串可读可写
open($fh, "+<", \\$string);  # 字符串可读可写,但是写的时候添加在已有内容的后面

这些返回的句柄完全和文件句柄一样,所以所有针对文件的 I/O 操作都能继续用,例如 seek,truncate,sysread 和 friends。