0

我想读取从 STDIN 输入的 html 文件执行一些功能,然后将另一个 html 文件写入 STDOUT。我的问题是我必须以规定的方式提供文件。我尝试了很多东西,但没有任何效果。什么都没有打印出来

我的命令行提示符

perl universe.pl<sun.html>galaxy.html

我的代码 -

open(my $in, "<&STDIN")     or die "Can't dup STDIN: $!";
open(my $out, ">&STDOUT")     or die "Can't dup STDOUT: $!";

my @lines = <$in>;
foreach(@lines) {
   push(@newlines,$_);
   say "Lines pushing:", $_;
}
4

3 回答 3

2

您不需要打开 STDIN 或 STDOUT;他们总是准备好打开。

您不需要像以下操作那样将整个文件放入内存中:

my @lines = <$in>;

您从不使用$out应该表明存在问题的哪个。

while (<>)
{
    print mapping_func($_);
}

您的函数在哪里mapping_func()对其输入字符串进行相关转换并返回映射结果:

sub mapping_func
{
    my($string) = @_;
    $string =~ s/html/HTML/gi;
    return $string;
}
于 2013-11-02T15:51:27.107 回答
1

使用魔法钻石运算符<>,您将能够按照您的要求进行操作。但请下次提供更多的搜索工作。

use strict; use warnings;

while (my $line = <>) {
   # do something with $line
}

最后但并非最不重要的; 如果您必须以好的方式解析 HTML,请查看HTML::TreeBuilder::XPath或只是HTML::TreeBuilder

于 2013-11-02T15:40:40.740 回答
0

我从另一个 Perl 脚本中运行的脚本遇到了这个问题。

解决方案是设置 $| 在第二个脚本(执行从 STDIN 读取的脚本)中。

于 2017-12-01T22:53:51.387 回答