1

ファイルを入力し、既存のものの間に空白行を入れてエクスポートすることにより、Perlでtxtファイルを変更しようとしています。どうすればいいですか?私はこれまでのところこれを持っています:

#!/usr/bin/perl;
use strict;
use warnings;
print "Hi! This Program Will Input\n";
print "The File and Export A New\n";
print "File With A Blank Line In-Between\n";
print "Every Other Line\n";
sleep(2);
print "\n";
print "\n";
print "Working\n";
print "\n";
sleep(1);
print "\n";
print "Working\n";
sleep(1);

open(my $in, "<", "input.txt") or die "Can't Open Input.txt: $!";
open(my $out, ">", "output.txt") or die "Can't Open Output.txt: $!";
my @lines = <$in>;
while (<$in>)  {
    print $out 
    print $lines[$#lines];
    print "    ";
}


print "Completed Successfully!!\n";
print "\n";
print "Outputed to Output.txt\n";


close $in or die "$in: $!"

私は何が欠けていますか?私はPerlを勉強したばかりなので、あまり知りません。

4

1 に答える 1

2

問題はwhileループです。を使用してファイルハンドルを反復処理するwhileか、 を使用してファイルの内容を保存した配列に対してループを実行できますfor。イテレータは、使い果たされるまで 1 回処理できます。そのすべてのコンテンツを配列に抽出するために実行しwhileます。ループ内で再度処理するのは誤りです。

それに加えて、ファイルハンドルに出力するにprint()は、同じ呼び出しで関数の最初の引数としてそれを渡す必要" "があり、改行ではなく、\n改行です。

my @lines = <$in>;
#while (<$in>)  {
for ( @lines ) { 
    print $out $_; 
    print $out "\n";
}

しかし、そのコードをすべて忘れて、ワンライナーを学ぶことができます。これは同じ結果をもたらします:

perl -ne 'print "$_\n"' input.txt >output.txt
于 2013-10-22T15:15:05.700 に答える