Как я могу изменить вывод функции PRINT, используя связь с реализацией Moose?

Я пока не могу осмыслить TIE, но примеры (example- 1 пример-2 example-3) Я видно, что до сих пор использовалась реализация, отличная от Moosy, есть ли способ сделать это:

package MY_STDOUT;
use strict;
my $c = 0;
my $malformed_header = 0;
open(TRUE_STDOUT, '>', '/dev/stdout');
tie *STDOUT, __PACKAGE__, (*STDOUT);

sub TIEHANDLE {
    my $class = shift;
    my $handles = [@_];
    bless $handles, $class;
    return $handles;
}

sub PRINT {
    my $class = shift;
    if (!$c++ && @_[0] !~ /^content-type/) {
        my (undef, $file, $line) = caller;
        print STDERR "Missing content-type in $file at line $line!!\n";
        $malformed_header = 1;
    }
    return 0 if ($malformed_header);
    return print TRUE_STDOUT @_;
}
1;


use MY_STDOUT;
print "content-type: text/html\n\n"; #try commenting out this line
print "<html>\n";
print "</html>\n";

Более Perl-Moosy способом?

Например, я должен сделать

open(TRUE_STDOUT, '>', '/dev/stdout');
tie *STDOUT, __PACKAGE__, (*STDOUT);

в функции BUILD {}?

Было бы разумнее реализовать это как класс Moosy или как Moose :: Role?

И наконец, нужно ли мне сделать что-нибудь вроде

my $MY_STDOUT = MY_STDOUT->new();

использовать это?


person qodeninja    schedule 29.09.2011    source источник


Ответы (1)


Я понял, как это сделать с помощью IO :: Scalar

https://gist.github.com/1250048

Теперь мне просто нужно понять, как это сделать для STDOUT!

person qodeninja    schedule 29.09.2011
comment
Чтобы ответить на вопрос, на который вы не дали возможности ответить в другом месте, я бы никогда не стал отрицать кого-то за непонимание чего-либо. - person ikegami; 01.10.2011