1

txt ファイルを開き、その中の番号を読み取り、1 ずつインクリメントされた番号でファイルを上書きするこの小さな perl スクリプトがあります。ファイルを開いて読み取り、ファイルに書き込むことはできますが、問題が発生しています。さらに、ファイルを 2 回開かずにこれを行う方法があるかどうか疑問に思っています. これが私のコードです:

#!/usr/bin/perl

open (FILE, "<", "data.txt") or die "$! error trying to a\
ppend";

 undef $/;

$number = <FILE>;
$number = int($number);
$myNumber = $number++;
print $myNumber+'\n';
close(FILE);

open(FILE, ">data.txt") or die "$! error";
print FILE $myNumber;
close(FILE);
4

3 に答える 3

3

行を変更する

$myNumber = $number++;
to 
$myNumber = $number+1;

これで問題は解決するはずです。

以下は、ファイルを一度だけ開くことで実行できる方法です。

 open(FILE, "+<data.txt") or die "$! error";
 undef $/; 

 $number = <FILE>;
 $number = int($number);
 $myNumber = $number+1;
 seek(FILE, 0, 0); 
 truncate(FILE, tell FILE);
 print $myNumber+"\n";

 print FILE $myNumber;
 close(FILE);
于 2013-03-23T04:38:44.257 に答える
0

これを試して:

#!/usr/bin/perl
use strict;
use warnings;
my $file = "data.txt";
my $number = 0;
my $fh;
if( -e $file ) {
    open $fh, "+<", $file or die "Opening '$file' failed, because $!\n";
    $number = <$fh>;
    seek( $fh, 0, 0 );
} else {                  # if no data.txt exists - yet
    open $fh, ">", $file or die "Creating '$file' failed, because $!\n";
}
$number++;
print "$number\n";
print $fh $number;
close( $fh );

bash シェルを使用していて、コードを test.pl に保存している場合は、次のようにテストできます。

for i in {1..10}; do ./test.pl; done

次に、「cat data.txt」に 10 が表示されます。

于 2013-03-23T05:33:53.693 に答える