我想读取从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:", $_;
}
答案 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::XPath或HTML::TreeBuilder
答案 2 :(得分:0)
我遇到了一个从另一个Perl脚本中运行的脚本的问题。
解决方案是设置$ |在第二个脚本中(执行从STDIN读取的脚本的脚本)。