##
package PrintHtml;
# Print class to print a string in html format
use warnings;
use strict;
use Carp;
use Print;
sub new {
my $type = shift;
my $class = ref $type || $type;
# itsPrint is private!
my $itsPrint = shift;
my $self = {
itsPrint => $itsPrint,
};
my $closure = sub {
my $field = shift;
return $self->{$field};
};
bless ($closure,$class);
return $closure;
}
sub print {
my $self = shift;
print "\n";
&{ $_[0]}("itsPrint")->print;
print "
\n";
}
1;
####
package PrintLatex;
# Print class to print a string in latex format
use warnings;
use strict;
use Carp;
use Print;
sub new {
my $type = shift;
my $class = ref $type || $type;
# itsPrint is private!
my $itsPrint = shift;
my $self = {
itsPrint => $itsPrint,
};
my $closure = sub {
my $field = shift;
return $self->{$field};
};
bless ($closure,$class);
return $closure;
}
sub print {
my $self = shift;
print "\\begin{paraf}\n";
&{ $_[0]}("itsPrint")->print;
print "\\end{paraf}\n";
}
1;
####
#!/usr/bin/perl
use warnings;
use strict;
use Print;
use PrintHtml;
use PrintLatex;
print "Text...\n";
my $print = Print->new();
$print->text("hello");
$print->print;
print "\nHTML...\n";
my $html = PrintHtml->new($print);
$html->print;
print "\nLatex...\n";
my $latex = PrintLatex->new($print);
$latex->print;