sub htmlprint {
my %arg = @_;
$arg{file}->printf(
'%s',
$arg{colour},
$arg{text},
);
}
####
use Carp qw(croak);
sub htmlprint {
my %arg = @_;
exists $arg{file} or croak "Expected file";
exists $arg{text} or croak "Expected text";
exists $arg{colour} or croak "Expected colour";
$arg{file}->printf(
'%s',
$arg{colour},
$arg{text},
);
}
##
##
use Carp qw(croak);
use Scalar::Util qw(blessed);
sub htmlprint {
my %arg = @_;
exists $arg{file} or croak "Expected file";
exists $arg{text} or croak "Expected text";
exists $arg{colour} or croak "Expected colour";
ref($arg{file}) eq 'GLOB'
or blessed($arg{file}) && $arg{file}->can('printf')
or croak "File should be a filehandle or object";
defined($arg{text} && !ref($arg{text})
or croak "Text should be a string";
defined($arg{colour} && !ref($arg{colour})
or croak "Colour should be a string";
$arg{file}->printf(
'%s',
$arg{colour},
$arg{text},
);
}
##
##
use feature qw(state);
use Type::Params qw(compile_named);
use Types::Standard qw(FileHandle HasMethods Str);
sub htmlprint {
state $check = compile_named(
file => FileHandle | HasMethods['printf'],
text => Str,
colour => Str,
);
my $arg = $check->(@_);
$arg->{file}->printf(
'%s',
$arg->{colour},
$arg->{text},
);
}
##
##
use Type::Params qw(compile_named);
use Types::Standard qw(FileHandle HasMethods Str);
my $_check_htmlprint;
sub htmlprint {
$_check_htmlprint ||= compile_named(
file => FileHandle | HasMethods['printf'],
text => Str,
colour => Str,
);
my $arg = $_check_htmlprint->(@_);
...; # rest of the function goes here
}
##
##
# will throw an exception because of 'size'
htmlprint( file => $fh, text => "Hello world", colour => "red", size => 7 );
##
##
use feature qw(state);
use Type::Params 1.004000 qw(compile_named);
use Types::Standard qw(FileHandle HasMethods Str);
sub htmlprint {
state $check = compile_named(
file => FileHandle | HasMethods['printf'],
text => Str,
colour => Str, { default => "black" },
);
my $arg = $check->(@_);
...; # rest of the function goes here
}
##
##
use feature qw(state);
use Type::Params 1.004000 qw(compile_named_oo);
use Types::Standard qw(FileHandle HasMethods Str);
sub htmlprint {
state $check = compile_named_oo(
file => FileHandle | HasMethods['printf'],
text => Str,
colour => Str, { default => "black" },
);
my $arg = $check->(@_);
$arg->file->printf( # not $arg->{file}
'%s',
$arg->colour, # not $arg->{colour}
$arg->text, # not $arg->{text}
);
}
##
##
use feature qw(state);
use Type::Params 1.004000 qw(compile_named);
use Types::Standard qw(FileHandle HasMethods Str);
sub htmlprint {
state $check = compile_named(
file => FileHandle | HasMethods['printf'],
text => Str,
colour => Str, { default => "black" },
);
my $self = shift;
my $arg = $check->(@_);
...; # rest of the function goes here
}
##
##
use feature qw(state);
use Type::Params 1.004000 qw(compile_named);
use Types::Standard qw(FileHandle HasMethods Str Object);
sub htmlprint {
state $check = compile_named(
file => FileHandle | HasMethods['printf'],
text => Str,
colour => Str, { default => "black" },
);
my $self = Object->(shift); # will die if it's not an object
my $arg = $check->(@_);
...; # rest of the function goes here
}
##
##
use feature qw(state);
use Type::Params 1.004000 qw(compile);
use Types::Standard qw(FileHandle HasMethods Str);
sub htmlprint {
state $check = compile(
FileHandle | HasMethods['printf'],
Str,
Str, { default => "black" },
);
my ($file, $text, $colour) = $check->(@_);
...; # rest of the function goes here
}
htmlprint($fh, "Hello world", "red");
htmlprint($fh, "Hello world"); # defaults to black
##
##
package My::Types {
use Type::Library -base;
use Type::Utils -all;
use Types::Standard ();
declare "FileHandle",
as Types::Standard::FileHandle;
coerce "FileHandle",
from Types::Standard::Str, via {
open(my $fh, "<", $_) or die("Could not open $_: $!");
return $fh;
};
}
##
##
use feature qw(state);
use Type::Params 1.004000 qw(compile_named);
use Types::Standard qw(HasMethods Str);
use My::Types qw(FileHandle);
sub htmlprint {
state $check = compile_named(
file => FileHandle | HasMethods['printf'],
text => Str,
colour => Str, { default => "black" },
);
my $arg = $check->(@_);
...; # rest of the function goes here
}
##
##
htmlprint(
file => "/tmp/out.html", # will be coerced to a filehandle
text => "Hello world",
);
##
##
use feature qw(state);
use Type::Params 1.004000 qw(compile_named);
use Types::Standard qw(HasMethods Str);
use My::Types qw(FileHandle);
sub htmlprint {
state $check = compile_named(
file => FileHandle->no_coercions | HasMethods['printf'],
text => Str,
colour => Str, { default => "black" },
);
my $arg = $check->(@_);
...; # rest of the function goes here
}