![](https://cos-cdn.shuashuati.com/pipixue-web/2020-1231-2005-12/ti_inject-812ce.png)
=learn 数据的读写 1 定义文件句柄,建立句柄和文件的关联(可以将句柄理解为文件在的名称) open 句柄名称 ," 打开模式 "," 文件路径 / 文件名称 "; 句柄名称和自定义函数一样,直接命名,无需指示符。 打开模式有: < 或 r 只读方式打开,将文件指针指向文件头。文件不存在返回 0. > 或 w 写入方式打开,将文件指针指向文件头 并将文件大小截为零。如果文件不存在则尝试创建之。 >> 或 a 写入方式打开,将文件指针指向文件末尾。 如果文件不存在则尝试创建之。 +< 或 r+ 读写方式打开,将文件指针指向文件头。 +> 或 w+ 读写方式打开,将文件指针指向文件头并将文件大小截为零。 如果文件不存在则尝试创建之。 +>> 或 a+ 读写方式打开,将文件指针指向文件末尾。 如果文件不存在则尝试创建之。 例: open FH_READ,"<","read.txt";# 从当前目录以读模式打开文件 read.txt ,定义其句柄为 FH_READ open FH_WRITE,">","write.txt";# 从当前目录以读模式打开文件 write. 关闭句柄和文件的关联用 close 命令 close FH_READ; 2 的写和读 写: print 写模式的句柄 写入的内容列表 读: < 读模式的句柄 > 从当前位置读取 1 行。读后自动设定下一行为当前位置。和 g 模式匹配类似。 但是读到结尾后不会重置位置为 0. 在标量上下文返回文件一行,在列表上下文返回所有行,一行一个元素。 钻石符读取的内容包含换行符,注意要用 chomp 切除 =cut # 例 在 d 盘根目录下新建一文件 write.txt 进行写入。写入两行内容分别为 “line1”“line2” use 5.010 ; open FW , ">" , "d:/write.txt" ; print FW "line1\nline2" ; close FW ; # 读取 d 盘根目录下文件 write.txt 的内容 open FR , "<" , "d:/write.txt" ; # 标量上下文,一次读一行 $first_line =
; $second_line =
; seek FR , 0 , 0 ; # 设定文件读取位置为文件的起始位置。 # 列表上下文,将所有行读出,赋值数组 @all_line =
; chomp ( $first_line , $second_line , @all_line ); say for $first_line , $second_line , @all_line ; seek FR , 0 , 0 ; # 用 while 来读取所有行 while (
){ chomp ; say ; } close FR ; =homework 补充 randomDNA 自定义函数,函数返回其参数指定长度的 DNA 序列 在 d 盘根目录下新建一文件 dna.txt 进行写入。调用 randomDNA 函数写入两行长度为 20 的随机 DNA 序列。 注意换行需要写入 "\n" 然后打开新建的文件,读入所有行,屏幕输出一共多少行。 =cut sub randomDNA { my $num = shift ; my $DNA ; my @base = xx ( A T C G ); $DNA .= $base [ rand @base ] for X XX XXXX ; return $DNA ; } open XX , XXX , XXXXXXXXXX ; print XX randomDNA ( 20 ), "\n" for 1 .. 2 ; close XX ; open XX , XXX , XXXX or die ; chomp ( @line =
); print XXXXXX @line ;