如何从用户输入(Perl)写入多行文件

时间:2016-09-26 15:27:53

标签: perl io

我正在尝试做一个简单的perl程序,它接受用户输入并将其写入文件。但是我希望能够在文件中有多行而不是整行用户输入在一行(例如用户类型\ n因此移动到文件中的下一行)

这是我目前的代码

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";
}

1 个答案:

答案 0 :(得分:4)

你的代码中有这一行:

my $input = <STDIN>;

这意味着&#34;从STDIN读取直到并包括下一个换行符并返回该数据&#34;。因此,根据定义,$input只能包含一行输入。

您可以在这里采取几种不同的方法。

1 /将代码放在while循环中。

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

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

但是这个循环怎么结束?用户需要输入&#34;文件末尾&#34;字符 - 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";
}

我们已将$/更改为两个换行符。所以我们将继续接受用户输入,直到他们输入两个连续的换行符。

其中任何一个都可以使用,但它们都会让用户更难以使用 - 因为他们需要知道一种特殊的方式来结束他们的输入。