我是Perl的新手。我要做的是打开一个文件列表,在每个文件中增加三个不同的变量,保存文件,然后关闭。
变量看起来像这样
This_Is_My_Variable03
This_Is_My_Variable02
This_Is_My_Variable01
以01结尾的变量在文件中多次。变量有时是字符串的一部分。变量的This_Is_My_Variable
部分永远不会改变。
感谢。
这可能不是最好的解决方案,但它有效
#!perl=C:\IBM\RationalSDLC\ClearCase\bin\perl
use warnings;
use strict;
use Tie::File;
tie my @data, 'Tie::File', 'myfile.txt' or die $!;
s/(This_Is_My_Variable)(\d+)+/$1.++($_=$2)/eg for @data;
untie @data;
感谢Borodin让我开始使用Tie::File
:这肯定有帮助。
使用while循环的第二个解决方案
#!perl=C:\IBM\RationalSDLC\ClearCase\bin\perl
use warnings;
#use strict;
sub inc {
my ($num) = @_;
++$num;
}
open(FILE, "myfile.txt") || die $!;
$i = 0;
while (<FILE>) {
$string = $_;
if (/This_Is_My_Variable../) {
$string =~ s/(This_Is_My_Variable)(\d+)+/$1.++($_=$2)/eg;
print "$string \n";
$i++;
}
else {
print "$string \n";
}
}
close FILE;
答案 0 :(得分:1)
use strict;
use warnings;
use Tie::File;
tie my @data, 'Tie::File', 'myfile' or die $!;
s/(\d+)$/sprintf '%02d', $1+1/e for @data;
答案 1 :(得分:1)
您的&#34;使用while循环的第二个解决方案&#34; 存在许多问题。
从不禁用use strict
以使程序正常运行。所有这一切都是隐藏代码中的问题
您有一个未使用的子例程inc
和一个未使用的变量$i
您应该始终使用open
的三参数形式和词法文件句柄
在应用替换之前无需测试该行是否包含字符串
您只需在替换字符串中使用($2+1)
,而不是将值分配给$_
并使用++($_=$2)
增加
如果要对从文件中读取的行使用命名变量,通常应使用while (my $string = <$fh>) {...}
。对于像这样的短块,最好只使用$_
您没有chomp
输入,除非您在每行后打印一个额外的空格和换行符,否则会很好
您的代码中有print "$string \n"
两次。它也可能只出现在if
结构
此代码执行相同的过程。我希望它有所帮助。
use strict;
use warnings;
open(my $fh, '<', 'myfile.txt') || die $!;
while (<$fh>) {
s/(This_Is_My_Variable)(\d+)/$1.($2+1)/eg;
print;
}