0

これは私にとって非常に新しいことですが、私はゆっくりとそれを拾っています。

私はファイルを開き、最初の行を変数に戻して処理を行い、処理が成功した後にファイルから最初の行を削除する必要があります。

mtスクリプトでは、これが最初の行を除くすべてを画面に出力するものです。

$file = 'test.txt';

system "tail -n+2 /home/username/public_html/adir/$file";

今、私はこの辺りを突っついたところ、次のことがわかりました。

system "sed -i '1d' home/username/public_html/adir/$file";

これは、ファイルの最初の行をインラインで削除することになっています。(私は試しませんでした)

最初の行を$variableに戻して何かを行うことができれば、それは完璧です。

失敗した場合は、ファイルにその行を追加し直すことができます。

配列を使用したFILE<および>の束でこれを実行できることはわかっていますが、少し多いようです。

ファイルは小さく、それぞれ6文字で100行未満です。

私はこれのためにsedまたはtailを追求することについて完全に無知ですか?

これらのシステムコールを使用して、削除された行を$ lineとして返すにはどうすればよいですか?

学習体験をありがとう。

4

2 に答える 2

3

素晴らしいsystem()タスクに使用するというアイデアは好きではありません。perl

どうですか?

use warnings;
use strict;

open my $fh, q[<], $ARGV[0] or die $!; 

## Read from the filehandle in scalar context, so it will read only
## first line.
my $first_line = <$fh>;

# do stuff with first line...

## And if stuff was successful, read left lines (all but the first one) and
## print them elsewhere. 
while ( <$fh> ) { 
    print;
}
于 2012-05-09T13:15:37.167 に答える
1

Tie::Fileが最適なもののように聞こえます。

#!/usr/bin/perl

use strict;
use warnings;
use Tie::File;

my $file = 'test.txt';

tie my @array, 'Tie::File', $file or die "Count not tie file: $file: $!";

my $line = $array[0];

if (do_something_successfully()) {
  shift @array;
}
于 2012-05-09T13:37:19.580 に答える