我在试着做一些内部编辑。我有一个基本的代码片段,当我有硬编码的替代品时,它可以工作。我现在试图通过传入变量来概括这个脚本,但是它失败了。
我的代码
use strict;
use warnings;
$^I = '.bak';
my $pow = shift;
my $pres = shift;
my $temp = shift;
#my $dir= shift || '.';
#my $fileName = "$dir/input.dat";
#open DATA, $fileName or die "Cannot open $fileName for read :$!";
while (<>){
s/^\s+tfwi\s+=\s+\d+.\d+E?[+-]?\d+/ tfwi = $temp/;
s/^\s+RP\s+=\s+\d+.\d+E?[+-]?\d+/ RP = $pow/ig;
s/^\s+pdome\s+=\s+\d+.\d+E?[+-]?\d+/ pdome = $pres/ig;
print;
}我使用以下命令行条目调用脚本“perl inputupdate.pl input.dat 2 3 4"。代码将看起来像吐出的“不能打开4:没有这样的文件”--如果我只是在命令行提供一个文件的话--工作得很好。有什么想法吗?
发布于 2015-03-09 15:52:24
你有
my $pow = shift;
my $pres = shift;
my $temp = shift;input.dat分配给$pow,2分配给$pres,3 $temp,以及4在@ARGV中。解决方案1:更改参数以匹配代码。
perl inputupdate.pl 2 3 4 input.dat解决方案2:更改代码以匹配参数。
my ($pow, $pres, $temp) = splice(@ARGV, 1);发布于 2015-03-09 15:22:54
input.dat被转移到$pow。
2被转移到$pres。
3被转移到$temp。
没有更多的移位,因此4保留在@ARGV中,并被解释为由ARGV操作符<>读取的文件句柄ARGV的文件名。
发布于 2015-03-09 15:32:41
Perl将ARGV设置为('input.dat',2,3 ,4)并按该顺序处理arg,因此将文件名移到arg列表的末尾并运行:
perl inputupdate.pl 2 3 4 input.dathttps://stackoverflow.com/questions/28945480
复制相似问题