如何在Perl中获取单个变量的多行?

时间:2015-07-03 06:32:07

标签: perl

以下是我在Perl编程中的案例:

CASE-1

print "User input :\n";

my $test = <>;

print "\nTest1:\n $test";

CASE-2

my $test2="hello

how are you";

print "\nTest2:$test2";

在case-1中,我传递输出如下:

hello

how are you

但它只考虑你好(第一行)

在案例-2中我分配给变量test2。

正在考虑这两条线。

有人可以帮我从用户输入中读取单行变量的两行吗?

2 个答案:

答案 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;
相关问题