繁体   English   中英

为什么我无法在 perl 中打开文件进行读写?

[英]Why I can not open files to read or write in perl?

我正在使用 vs 代码学习 Perl。 我正在尝试打开 file.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

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

您的代码中有:

$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': $!";

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

你不在你认为的地方

我猜问题出在您的 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': $!";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM