增加文件中的变量

时间:2013-04-05 22:00:17

标签: perl

我是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;

2 个答案:

答案 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;
}