【问题标题】:Why I can not open files to read or write in perl? [closed]为什么我无法打开文件以在 perl 中读取或写入? [关闭]
【发布时间】:2022-01-22 19:54:46
【问题描述】:

我正在使用 vs 代码学习 Perl。 我正在尝试打开文件 .pep 并从中读取,但每次我发现找不到路径。 我已将 protein.pep 和 code.pl 放在同一个文件夹中。

这里是 protein.pep 文件

MNIDDKLEGLFLKCGGIDEMQSSRTMVVMGGVSGQSTVSGELQD
SVLQDRSMPHQEILAADEVLQESEMRQQDMISHDELMVHEETVKNDEEQMETHERLPQ
GLQYALNVPISVKQEITFTDVSEQLMRDKKQIR

使用路径 D:\bioinformatics\protein.pep

这是我的 code.pl 文件

#!/usr/bin/perl -w

$proteinfilename = 'protein.pep';

open(PROTEINFILE, $proteinfilename)or die "Can't open '$seq': $!";

# First line
$protein = <PROTEINFILE>;

# Print the protein onto the screen

print "\nHere is the first line of the protein file:\n\n";
print $protein;

# Second line
$protein = <PROTEINFILE>;

# Print the protein onto the screen

print "\nHere is the second line of the protein file:\n\n";
print $protein;

# Third line
$protein = <PROTEINFILE>;

# Print the protein onto the screen
print "\nHere is the third line of the protein file:\n\n";
print $protein;

它的路径是D:\bioinformatics\code.pl

我得到这个输出“系统找不到指定的路径。”

【问题讨论】:

  • 是这条线open(PROTEINFILE, $proteinfilename)or die "Can't open '$seq': $!"; 给出了错误吗?顺便提一句。 $seq 未定义
  • 我还建议使用Three-arg open() 而不是老式的两个参数
  • 不是错误,是输出
  • ok,但是也可以输出错误。尝试确定脚本的哪一行产生了输出
  • 我会在我的问题中附上一张代码图片,请检查一下

标签: perl


【解决方案1】:

您的代码中有:

$proteinfilename = 'protein.pep';

open(PROTEINFILE, $proteinfilename)or die "Can't open '$seq': $!";

首先,修改错误信息,告诉你open想要哪个文件:

open(PROTEINFILE, $proteinfilename) or die "Can't open '$proteinfilename': $!";

您只需给open 提供相对路径名。我敢打赌它适用于完整的路径名:

$proteinfilename = 'D:\\bioinformatics\\protein.pep';

open(PROTEINFILE, $proteinfilename) or die "Can't open '$proteinfilename': $!";

如果您仍然有问题,请发布程序的实际输出。

你不在你认为的地方

我猜测问题出在您的 IDE 和当前工作目录上。程序不会自动在您存储它的目录中运行。您可以使用 Perl 附带的 Cwd 模块来查看您的 IDE 从哪里开始:

use Cwd qw(getcwd);
print "I'm in " . getcwd() . "\n";

如果您希望程序在其工作时位于特定目录中,

chdir $some_directory or die "Could not change to '$some_directory': $!";

您可以选择该目录与程序的目录相同。 Perl 附带的FindBin 模块可以方便地告诉您它在哪里:

use FindBin;
chdir $FindBin::Bin;

更现代一点

Perl 有各种更好的做事方式,尽管它几乎支持 30 年前你可以做的所有事情。表示文件模式的三个参数open 更安全一些。而且,Perl v5.36 是关于在指定use v5.36 时禁用用户定义的裸字文件句柄,所以要养成使用词法文件句柄的习惯。

open my $protein_fh, '<', $proteinfilename or die "Can't open '$proteinfilename': $!";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-23
    • 1970-01-01
    • 2010-09-24
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    相关资源
    最近更新 更多