2016-09-26 9 views
2

ユーザの入力を受け取り、ファイルに書き込む単純なperlプログラムを実行しようとしています。しかし、私は、ファイル内に複数の行を入れることができるようにしたいのです(例えば、ユーザーは\ nをタイプするとファイル内の次の行に移動します)ユーザ入力(Perl)からファイルに複数の行を書く方法

ここに私の現在のコード

「次の改行文字までを含むSTDINから読み込み、そのデータを返す」という意味

my $input = <STDIN>; 

sub addContentToFile { 

    my ($self) = @_; 
    open(my $fh, '>>', $self->{path}) or die "Could not open file: " .$self->{path}; 
    print "File is open for writing...\n"; 

    #my $input = $self->{content}; 
    my $input = <STDIN>; 

    print $fh $input; 

    print "Added : " .$input 
     ."To File: " .$self->{path} 
     ."\n"; 

    close $fh; 
    print "\nFile Closed.\n"; 
} 
+0

あなたはその機能を呼び出していますか? – simbabque

答えて

4

はあなたのコードでこの行を持っています。したがって、定義により、$inputは1つの入力行しか含めることができません。

ここでは、いくつかのアプローチがあります。

1 /コードをwhileループに入れてください。

while (<STDIN>) { 
    print $fh $_; 

    print "Added : " . $_ 
     ."To File: " . $self->{path} 
     ."\n"; 
} 

しかし、どのようにループが終了しますか?ユーザーは「ファイルの終わり」の文字(Ctrl + D)を入力する必要があります。

2 /変更$/。厳密には、<...>は次の改行文字に読み込まれません。それは現在の内容が何であるかを、$/(入力レコードセパレータ)に読み込みます。 $/のデフォルト値は改行ですが、これを変更することができます。

{ 
    local $/ = "\n\n"; # Localised change in a naked block 

    my $input = <STDIN>; 

    print $fh $input; 

    print "Added : " . $input 
     ."To File: " . $self->{path} 
     ."\n"; 
} 

ここでは、$/を2つの改行文字に変更しました。したがって、2つの連続する改行を入力するまで、ユーザー入力を受け入れ続けます。

これらのいずれも機能しますが、入力を終了する特別な方法を知っておく必要があるため、ユーザーが使用するのが難しくなります。

関連する問題