从STDIN读取文件并写入STDOUT

时间:2013-11-02 15:31:47

标签: perl file

我想读取从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:", $_;
}

3 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

使用魔术钻石操作员<>,您可以按照自己的要求进行操作。但请下次再提供一些搜索工作。

use strict; use warnings;

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

最后但并非最不重要;如果你必须好好解析HTML,请查看HTML::TreeBuilder::XPathHTML::TreeBuilder

答案 2 :(得分:0)

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

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