我刚刚开始学习Perl,我遇到了与打开与我的程序位于同一目录中的文件有关的问题.
#!/usr/bin/perl -w $proteinfilename = 'NM_021964fragment.pep'; open(PROTEINFILE,$proteinfilename) or die "Can't write to file '$proteinfilename' [$!]\n"; $protein = <PROTEINFILE>; close(PROTEINFILE); print "Essa é a sequência da proteína:\n"; print $protein,"\n"; exit;
当我指定文件的目录时,从’NM_021964fragment.pep’更改为’/Users/me/Desktop/programa/NM_021964fragment.pep’,程序可以正常工作.但是,即使没有我指定目录,它仍然无法工作,因为程序和文件在同一个文件夹中?
解决方法
如果您正在进行简单的文件读取,则可以使用<>钻石运算符为简单起见
use strict; use warnings; my $protein = <>; print "Essa é a sequência da proteína:\n"; print "$protein\n";
并使用如下脚本:
perl script.pl NM_021964fragment.pep
这将强制您使用正确的路径,假设您在运行脚本时使用选项卡自动完成.
使用命令行参数这种方式有点不安全,因为可以通过不受保护的打开命令执行任意代码.您可以使用模块ARGV::readonly
来防止此类事件.或者只是简单地使用代码本身,它很简单:
for (@ARGV){ s/^(\s+)/.\/$1/; # leading whitespace preserved s/^/< /; # force open for input $_.=qq/\0/; # trailing whitespace preserved & pipes forbidden };