我管道输出了几个脚本。其中一个脚本输出一个由我的perl脚本处理的整个HTML页面。我希望能够将整个58K的文本拉入perl脚本(当然,它将包含换行符)。
我认为这可行:
open(my $TTY, '<', '/dev/tty');
my $html_string= do { local( @ARGV, $/ ) = $TTY ; <> } ;
但它只是没有做我需要的。有什么建议吗?
答案 0 :(得分:47)
my @lines = <STDIN>;
或
my $str = do { local $/; <STDIN> };
答案 1 :(得分:6)
我不能让这个机会说出我爱 IO::All
多少不说:
♥♥__&#34;我非常喜欢IO::All
...很多&#34; __♥♥
POD概要的变化:
use IO::All;
my $contents < io('-') ;
print "\n printing your IO: \n $contents \n with IO::All goodness ..." ;
警告:IO::All
可能会开始用自己阴险的善意替换你所知道的关于IO的其他所有内容。
答案 2 :(得分:3)
将它变成你想要的单个字符串:
#!/usr/bin/perl -w
use strict;
my $html_string;
while(<>){
$html_string .= $_;
}
print $html_string;
答案 3 :(得分:1)
tl;博士:请看帖子的底部。首先解释。
我只是想知道同样的事情,但我想要适合贝壳单线的东西。结果证明这是(Korn shell,整个例子,下面解剖):
print -nr -- "$x" | perl -C7 -0777 -Mutf8 -MEncode -e "print encode('MIME-Q', 'Subject: ' . <>);"; print
解剖:
print -nr -- "$x"
回显整个$x
,没有任何尾随换行(-n
)或反斜杠转义(-r
),POSIX等价物:printf '%s' "$x"
-C7
将 stdin , stdout 和 stderr 设置为UTF-8模式(您可能需要也可能不需要) -0777
设置$/
,以便Perl会覆盖整个文件;参考:man perlrun(1)
-Mutf8 -MEncode
加载两个模块print encode('MIME-Q', 'Subject: ' . <>);
,让我们从内到外,从右到左看一下:
<>
获取整个 stdin 内容"Subject: "
Encode::encode
,要求将其转换为MIME Quoted-Printable ; print
,再次在Korn shell中,它与POSIX shell中的; echo
相同 - 只是回显一个换行符。使用perl
选项致电-0777
。然后,在脚本内部,<>
将包含整个 stdin 。
#!/usr/bin/perl -0777
my $x = <>;
print "Look ma, I got this: '$x'\n";
答案 4 :(得分:-1)
我一直在使用裸露的方块。
my $x;
{
undef $/; # Set slurp mode
$x = <>; # Read in everything up to EOF
}
# $x should now contain all of STDIN