Вопрос по perl – Как я могу хлебать STDIN в Perl?

15

Я передаю вывод нескольких скриптов. Один из этих скриптов выводит всю HTML-страницу, которая обрабатывается моим Perl-скриптом. Я хочу быть в состоянии вытащить весь 58K текста в Perl-скрипт (который, конечно, будет содержать переводы строки).

Я думал, что это может сработать:

open(my $TTY, '<', '/dev/tty');

my $html_string= do { local( @ARGV, $/ ) = $TTY ; <> } ;

Но это не то, что мне нужно. Какие-либо предложения?

Ваш Ответ

4   ответа
47
my @lines = <STDIN>;

ил

my $str = do { local $/; <STDIN> };
Второй ответ - это то, что я искал, спасибо. phileas fogg
Должна ли твоя линия:my @lines = <STDIN>; на самом деле:my $lines = <STDIN>; ? Kevin Fegan
@ KevinFegan Конечно нет. Это будет читать одну строку отSTDIN благодаря звонкамreadline в скалярном контексте. Sinan Ünür
6

любов IO::All пройти без слов:

♥ ♥ __ "Мне очень нравитсяIO::All ... много "__ ♥ ♥

Вариант ОПИСАНИЕ ПОД:

use IO::All;
my $contents < io('-') ;
print "\n printing your IO: \n $contents \n with IO::All goodness ..." ;

Предупреждение:IO::All может начать заменять все остальное, что вы знаете о IO в Perl, своим собственным коварным совершенством.

Вероятно, это был один из самых странных ответов, которые я читал на SO. Sebb
3

#!/usr/bin/perl -w
use strict;

my $html_string;
while(<>){
   $html_string .= $_;
}

print $html_string;
Я уже знал, как получить отдельные строки. Вот почему я явно указал «slurp» и привел пример, где я выключил символ завершения строки. phileas fogg
1

практический пример

Мне просто интересно то же самое, но я хотел что-то подходящее для однострочной оболочки. Оказывается, это так (оболочка Korn, весь пример, рассечена ниже):

print -nr -- "$x" | perl -C7 -0777 -Mutf8 -MEncode -e "print encode('MIME-Q', 'Subject: ' . <>);"; print

Dissecting:

print -nr -- "$x" эхом все$x без завершающего перевода строки -n) или обратная косая черта -r), Эквивалент POSIX:printf '%s' "$x"-C7 устанавливает STDIN, Стандартный вывод, а также @ STDE в режим UTF-8 (он может вам или не нужен)-0777 устанавливает$/ так, что Perl украдет весь файл; ссылка: человекperlrun(1)-Mutf8 -MEncode загружает два модуля Остальная часть - это сама команда Perl:print encode('MIME-Q', 'Subject: ' . <>);, давайте посмотрим на это изнутри наружу, справа налево:<> забирает весь STDIN контент который соединяется со строкой"Subject: " и перешел кEncode::encode попросив его преобразовать это в MIME Quoted-Printable результат которого выводится на стандартный вывод (без завершающего перевода строки)а этим следует; print, снова в оболочке Korn, которая совпадает с; echo в оболочке POSIX - просто повторение новой строки.tl; др

Вызовperl с-0777 вариант. Затем внутри скрипта<> будет содержать весь STDIN.

полный автономный пример
#!/usr/bin/perl -0777
my $x = <>;
print "Look ma, I got this: '$x'\n";

Похожие вопросы