把字符串当作文件
提出问题
现在你手头上有的是字符串,但是你想把它作为一个文件来处理。例如,有一个子函数,它的参数为文件句柄,但是你想这个函数直接作用于你的字符串,而你不想把字符串写入一个文件。
解决方案
用 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。
Leave a Reply