请问这段perl代码是什么意思,请详细点,谢谢!

2024-12-21 21:07:05
推荐回答(1个)
回答1:

#!usr/bin/perl -w
use strict;
use 5.014;

open IN, "<", $ARGV[0] or die "read file error\n"; #以只读方式打开文件,文件句柄为IN, 文件名为命令行里的第一个参数
open OUT, ">", $ARGV[1] or die "out error\n"; #新建文件, 文件句柄为OUT, 文件名为命令行里第二个参数

while(){   #逐行读入文件,以下为按行操作
      chomp;
      if(/Molecule: ZINC/){   
           s/Molecule: //; # 行替换, 替换掉"Molecule: ", 即将 "Molecule: ZINC foo"这样的行替换为" ZINC foo"
           s/\s//g;  # 继续替换上一行,替换掉剩余的所有空格(包括空格,横竖制表符,换行符,换页符), 即将" ZINC foo"替换为"ZINCfoo"
           print OUT;  # 将替换完的行写入 文件(命令行里第二个参数)
        }elsif(/Amber Score:/){
           s/Amber Score://;  # 和上面一样,替换掉“Amber Score:”以及所有空格, 并写入刚才打开的那个文件, 写入时每行的格式为:“制表符”“被替换以后的行内容”“换行符”
           s/\s//g;
           print OUT "\t$_\n";
        }
}


总结一下, 就是读入这样的文本:

Module: fuck1 
Amber Score: 998
Module: fuck2 
Amber Score: 101
Module: fuck3
Amber Score: 250

然后输出这样的文件:

fuck1 998
fuck2 101
fuck3 250


说真的,吐了,这脚本写得太烂了。