More Related Content
Similar to Advanced modulinos
Similar to Advanced modulinos (20)
More from brian d foy (15)
Advanced modulinos
- 1. ★ Advanced
Modulinos
brian d foy
The Perl Review
YAPC::NA 2012
- 6. STDIN $0 STDOUT
@ARGV
%ENV exit code
- 19. % perl hello.pl
Hello World!
% perl hello.pl Chicago
Hello World!
% perl hello.pl -m Rahm
Hello World!
% perl hello.pl < aldermen
Hello World!
- 20. Connect the
command line to new()
% hello.pl -s Houston
?
use Hello;
new()
my $app->new(
input => $in_fh,
output => $out_fh,
message => $message,
);
$app->greet;
- 21. sub run {
my( $class, @args ) = @_;
my %args =
$class->process_args(@args);
my $self = $class->new(%args);
say { $self->fh }
$self->message;
}
- 22. sub process_args {
require Getopt::Std;
local @ARGV = @_;
getopts('oim:', my %opts);
$opts{'o'} //= *STDOUT;
$opts{'i'} //= *STDIN;
$opts{'m'} //= 'Hello World!';
# left over @_?
my %args = map {
$opts_map{$_} => $opts{$_}
} keys %opts;
}
- 24. sub new {
my( $class, %args ) = @_;
my $self = bless {}, $class;
foreach ( keys %args ) {
# maybe more complicated
$self->set( $_, $args{$_} );
}
return $self;
}
- 27. sub run {
my( $class, @args ) = @_;
my $object = eval {
...;
Result->new( code => 0 );
} or $@;
exit( $object->code );
}
- 29. sub run {
my( $class, @args ) = @_;
my $object = eval {
...;
Result->new( code => 0 );
};
exit( $error_object->code );
}
- 32. UNITCHECK {
if($ENV{TEST_HARNESS}){
__PACKAGE__->run_tests;
}
elsif( ! caller ) {
__PACKAGE__->run;
}
}
- 34. UNITCHECK {
if($ENV{TEST_HARNESS}){
__PACKAGE__->run_tests;
}
elsif($ENV{PERLDOC}){
__PACKAGE__->show_docs;
}
elsif( ! caller ) {
__PACKAGE__->run;
}
}