使用 $^I 并提供参数
Use $^I and supply arguments
我正在尝试执行一些就地编辑。当我有硬编码替代品时,我有一个基本片段可以使用。我现在试图通过传入变量来概括脚本,但它失败了。
我的代码
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"。代码看起来会吐出来 "Can't open 4: No such file" 如果我只在命令行提供一个文件,它就可以正常工作。有什么想法吗?
input.dat
转移到 $pow
.
2
转移到 $pres
.
3
转移到 $temp
.
没有更多的转变,因此 4
保留在 @ARGV
中,并被解释为 diamon 运算符 <>
读取的文件句柄 ARGV
的文件名。
Perl 将 ARGV 设置为 ('input.dat', 2, 3 ,4) 并按该顺序处理 args,因此将您的文件名移动到 arg 列表的末尾 运行:
perl inputupdate.pl 2 3 4 input.dat
你有
my $pow = shift;
my $pres = shift;
my $temp = shift;
- 这会将
input.dat
分配给 $pow
,
- 将
2
分配给 $pres
,
- 分配
3
$temp
和
- 在
@ARGV
离开 4
。
解决方案 1:更改参数以匹配代码。
perl inputupdate.pl 2 3 4 input.dat
解决方案 2:更改代码以匹配参数。
my ($pow, $pres, $temp) = splice(@ARGV, 1);
我正在尝试执行一些就地编辑。当我有硬编码替代品时,我有一个基本片段可以使用。我现在试图通过传入变量来概括脚本,但它失败了。
我的代码
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"。代码看起来会吐出来 "Can't open 4: No such file" 如果我只在命令行提供一个文件,它就可以正常工作。有什么想法吗?
input.dat
转移到 $pow
.
2
转移到 $pres
.
3
转移到 $temp
.
没有更多的转变,因此 4
保留在 @ARGV
中,并被解释为 diamon 运算符 <>
读取的文件句柄 ARGV
的文件名。
Perl 将 ARGV 设置为 ('input.dat', 2, 3 ,4) 并按该顺序处理 args,因此将您的文件名移动到 arg 列表的末尾 运行:
perl inputupdate.pl 2 3 4 input.dat
你有
my $pow = shift;
my $pres = shift;
my $temp = shift;
- 这会将
input.dat
分配给$pow
, - 将
2
分配给$pres
, - 分配
3
$temp
和 - 在
@ARGV
离开4
。
解决方案 1:更改参数以匹配代码。
perl inputupdate.pl 2 3 4 input.dat
解决方案 2:更改代码以匹配参数。
my ($pow, $pres, $temp) = splice(@ARGV, 1);