我正在尝试在脚本中使用我的模块。
我知道您必须提供模块位置,并希望在脚本中提供路径。但是,我收到错误消息:
没有这样的文件或目录
这是我的剧本:
use strict;
use warnings;
use lib "C:/Users/XPS13/Documents/Uni/UEProgramming";
use Bioinformatics;
my $DNAinput = "restriction_test.txt";
open (my $FH_DNA_in, "<", $DNAinput) or die " Can't open file $DNAinput: $!\n";
print "Pattern match for input file \n";
print (Bioinformatics::Pattern($FH_DNA_in), "\n"); # applying module function
这是我的模块
package Bioinformatics; # making module, 1st line contains name
use strict; # module uses strict and warnings
use warnings;
sub Pattern {
my $count = "0";
my ($DNAinput) = @_;
open (my $FH_DNA_in, "<", $DNAinput) or die " Can't open file $DNAinput: $!\n";
while (my $line = <$FH_DNA_in>) {
if ($line =~ /[AG]GATC[TC]/ ) {
++ $count;
}
}
print "Your sequence contains the pattern [AG]GATC[TC] $count times\n";
}
1; # last line
模块位置有效。
发生错误是因为我打开了两次文件(在脚本和模块中)
仅在模块内打开时,它才有效。更新的脚本是:
use strict;
use warnings;
use lib "C:/Users/XPS13/Documents/Uni/UEProgramming";
use Bioinformatics;
my $DNAinput = "restriction_test.txt";
print "Pattern match for input file \n";
print (Bioinformatics::Pattern($DNAinput), "\n"); # applying module function
答案 0 :(得分:0)
错误消息来自您函数内部的open
。在您的脚本中,您打开一个名为$FH_DNA_in
的文件句柄,然后将该文件句柄变量传递给您的函数
# V
open (my $FH_DNA_in, "<", $DNAinput) or die " Can't open file $DNAinput: $!\n";
# V
print (Bioinformatics::Pattern($FH_DNA_in), "\n"); # applying module function
在函数中,您将其用作要打开的文件的路径。
sub Pattern {
my $count = "0";
my ($DNAinput) = @_; # first arg was the filehandle!
# | this is the old filehandle
# V different var V
open (my $FH_DNA_in, "<", $DNAinput) or die " Can't open file $DNAinput: $!\n";
该函数中的$FH_DNA_in
是一个新的词法变量。它与旧的文件句柄无关,最终在$DNAinput
中,因为这是你作为第一个(也是唯一的)参数传递的。
如果您使用文件句柄所在的路径,Perl将序列化它。看起来像这样:
$ perl -E "open my $fh, '>', 'tmp'; say $fh;"
GLOB(0x26ba8c)
因此它试图查找具有该名称的文件,这当然不存在。
您应该看到一条完整的错误消息,如下所示:
无法打开文件GLOB(0x26ba8c):没有这样的文件或目录
请注意,由于您在\n
的参数中包含换行符die
,因此不会告诉您错误发生在哪一行。如果你还没有这样做,那么装载模块会更加明显,因为消息更像是
无法打开文件GLOB(0x26ba8c):C:/Users/XPS13/Documents/Uni/UEProgramming/Bioinformatics.pm第9行没有此类文件或目录。