以下是我在Perl编程中的案例:
print "User input :\n";
my $test = <>;
print "\nTest1:\n $test";
my $test2="hello
how are you";
print "\nTest2:$test2";
在case-1中,我传递输出如下:
hello
how are you
但它只考虑你好(第一行)
在案例-2中我分配给变量test2。
正在考虑这两条线。
有人可以帮我从用户输入中读取单行变量的两行吗?
答案 0 :(得分:2)
您可以设置$/
这是一个特殊变量,告诉perl在遇到换行符时不要停止捕获输入。
然而,一旦你设置了这个并且如果你从STDIN捕获然后按Enter键结束输入将不再起作用 - 而是你需要使用 ctrl + d on posix或 ctrl + z 在Windows上结束输入。
以下是一个例子:
use Modern::Perl;
local $/ = undef;
my $value = <>; # enter multiline string end with Ctrl-D or Ctrl-Z
print "VALUE = $value";
最后,如果您在函数中使用$/
,则使用local
关键字非常重要。这意味着$/
只会在您的函数范围内设置,并且不会影响其他捕获。
答案 1 :(得分:0)
如果 - 如评论中所述 - 您正在寻找单独的“行尾”标记,您可以这样做:
#!/usr/bin/env perl
use strict;
use warnings;
my $input;
while (my $line = <>) {
last if $line =~ m/^END$/;
$input .= $line;
}
print $input;
这一次仍然会读取一行,但在模式中检查每一行(在这种情况下只是单词'END')。如果该行不匹配,则将其连接到$input
。
可替换地:
local $/ = "END\n";
my $stuff = <>;
print $stuff;