我正在尝试做一个简单的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";
}
答案 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";
}
我们已将$/
更改为两个换行符。所以我们将继续接受用户输入,直到他们输入两个连续的换行符。
其中任何一个都可以使用,但它们都会让用户更难以使用 - 因为他们需要知道一种特殊的方式来结束他们的输入。