在Perl中,如何重定向" print"到变量而不是在屏幕上显示

时间:2015-09-15 02:45:02

标签: perl

我的情况是这样的:while循环将检查STDIN,一旦我输入一行包含一个关键词" win",level0子程序将显示"哈哈哈我赢了!\ n&# 34 ;.现在我想重新定位印刷的"哈哈哈我赢了\ n"到一个名为$ result的变量,而不是在屏幕上显示它,并chomp()它,然后在屏幕上显示修改后的信息。

我的预期显示: "哈哈哈,我赢了!结果已被重定向"

sub level0 {
    print "hahaha I win!\n";
}

sub level1 {
    level0();
}

sub check {
    my ($word) = @_;
    if ($word =~ /win/) {
        level1($word);
    }
}

while (<>) {
    ($line) = $_;
    $result = check($line);
    chomp($result);
    print "$result, the result has been redirected\n";
}

1 个答案:

答案 0 :(得分:5)

我不确定这是你应该做的事情,这通常是一个坏主意,因为你不能总是确定你所呼唤的一切的副作用。

但无论如何,如果必须,下面的内容应该有效。

while (my $line = <>) {
    my $result = '';
    open RESULT, '>', \$result or die $!;
    select RESULT;
    check($line);
    select STDOUT;
    chomp($result);
    print "$result, the result has been redirected\n";
}

您可以在http://www.perlmonks.org/?node_id=631760

看到更多选项