首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用$^I和supply参数

使用$^I和supply参数
EN

Stack Overflow用户
提问于 2015-03-09 15:15:31
回答 3查看 47关注 0票数 0

我在试着做一些内部编辑。我有一个基本的代码片段,当我有硬编码的替代品时,它可以工作。我现在试图通过传入变量来概括这个脚本,但是它失败了。

我的代码

代码语言:javascript
复制
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:没有这样的文件”--如果我只是在命令行提供一个文件的话--工作得很好。有什么想法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-03-09 15:52:24

你有

代码语言:javascript
复制
my $pow = shift;
my $pres = shift;
my $temp = shift;
  • 这将input.dat分配给$pow
  • 2分配给$pres
  • 指定3 $temp,以及
  • 4@ARGV中。

解决方案1:更改参数以匹配代码。

代码语言:javascript
复制
perl inputupdate.pl 2 3 4 input.dat

解决方案2:更改代码以匹配参数。

代码语言:javascript
复制
my ($pow, $pres, $temp) = splice(@ARGV, 1);
票数 1
EN

Stack Overflow用户

发布于 2015-03-09 15:22:54

input.dat被转移到$pow

2被转移到$pres

3被转移到$temp

没有更多的移位,因此4保留在@ARGV中,并被解释为由ARGV操作符<>读取的文件句柄ARGV的文件名。

票数 1
EN

Stack Overflow用户

发布于 2015-03-09 15:32:41

Perl将ARGV设置为('input.dat',2,3 ,4)并按该顺序处理arg,因此将文件名移到arg列表的末尾并运行:

代码语言:javascript
复制
 perl inputupdate.pl 2 3 4 input.dat
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28945480

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档