我已经为此苦苦挣扎了一段时间,我想知道我是否遗漏了一些明显的东西。
作为编程学习/实践,我正在尝试编写一个简单的脚本来计算限制酶消化混合物的成分。但是,首先我需要获得一份酶储备浓度列表。
我从 New England Biolabs酶页面中提取了所有单独的页面,我使用当前脚本的目标是提取酶的名称和公司提供的浓度。
此示例适用于 EcoRI 的本地副本(链接包含在提交的底部)。
use warnings;
use strict;
open(FILE,'productR0101.asp');
my $line;
my $counter;
my $array1;
my $array2;
my $array3;
my $concentration;
my @array4;
$counter = 1;
while ($line = <FILE>) {
chomp($line);
if ($counter == 6 ){
$array1 = $line;
$counter++;
}
else{
$counter++;
}
if ($line =~ m/.{8}units.ml/g) {
(@array4) =$line =~ m/.{8}units.ml/g;
print @array4;
}
}
print "\n".$array1;
exit;
每个文件在文件的第六行都有酶名称,所以我只拉了整行。但是,浓度在不同的位置,所以我的方法是一次读取一行文件,并匹配units/ml
标签。
我的想法是它应该打印出每一行的匹配,如果有的话,每次 while 循环运行时,有效地产生一串单独的打印语句。
这就是我搞砸的地方。该文件中有六个不同的位置带有units/ml
标签:三个 for20,000
和三个 for 100,000
。
我期待打印六个不同的结果,但是当我运行它时,只100,000 units/ml
返回一个结果。
我已经尝试了各种修复。我尝试连接字符串,尝试将其存储为字符串,尝试将其连接到另一个从未被该(@array4) = $line =~ m/.{8}units.ml/g
行触及的数组上,它要么破坏它,要么给出相同的结果。
最后,我为任何奇怪的约定道歉。我还在学习 Perl,我的第一次编程经验是使用 MATLAB。
此外,存在$array1
,$array2
等是因为我试图准确跟踪放在哪里;我的目的是在我让它正常工作后清理它。
那么有人对我做错了什么有任何想法吗?
编辑:数据源是每个酶页面的源代码。对于此示例,如果您查看页面源代码,您将获得我提供给脚本的完整输入文件。