Advanced modulinos trial
Upcoming SlideShare
Loading in...5
×
 

Advanced modulinos trial

on

  • 2,060 views

This is a first try at the Advanced Modulinos talk I'll give at this summer's conferences. It's still rough and I'm working out some stuff.

This is a first try at the Advanced Modulinos talk I'll give at this summer's conferences. It's still rough and I'm working out some stuff.

Statistics

Views

Total Views
2,060
Views on SlideShare
2,060
Embed Views
0

Actions

Likes
2
Downloads
8
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Advanced modulinos trial Advanced modulinos trial Presentation Transcript

  • Advanced Modulinos★ brian d foy The Perl Review Houston Perl Mongers
  • Files that work asprograms and modules at the same time
  • Unit testingCode reüseDistribution
  • # hello.pluse v5.10;say Hello World!;
  • % perl hello.plHello World!
  • use v5.10;run();sub run { say Hello World!; }
  • % perl hello.plHello World!
  • # Hello.pmuse v5.10;run() unless caller;sub run { say Hello World!; }
  • % perl hello.plHello World!% perl -MHello -e 1%
  • package Hello;use v5.10;__PACKAGE__->run unless caller;sub run { say Hello World!; }
  • use Test::More;use Test::Output;use_ok( Hello );stdout_ok( sub { Hello->run() }, Hello World!, ... );
  • package Hello;use v5.10;__PACKAGE__->run unless caller;sub run { my( $self ) = @_; say { $self->fh } Hello World!; }
  • package Hello;use v5.10;...;sub fh { *STDOUT }
  • use Test::More;use_ok( Hello );our $string;{open my $fh, >, $string;*Hello::fh = sub { $fh };}Hello->run;is($string, Hello World!);
  • package Hello;use v5.10;...;BEGIN {my $fh = *STDOUT;sub fh { $fh }sub set_fh { $fh = ...;}
  • use Test::More;use_ok( Hello );open my $fh, >, my $string;Hello->set_fh( $fh );Hello->run;is($string, Hello World!);
  • % perl hello.plHello World!% perl hello.pl HoustonHello World!% perl hello.pl -m TexasHello World!% perl hello.pl < partiersHello World!
  • 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;
  • sub run { my( $class, @args ) = @_; my %args = $class->process_args(@args); my $self = $class->new(%args); say { $self->fh } $self->message; }
  • 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; }
  • $app->new( input_fh => $in, output_fh => $out, message => Hello World! );
  • sub new { my( $class, %args ) = @_; my $self = bless {}, $class; foreach ( keys %args ) { # maybe more complicated $self->set( $_, $args{$_} ); } return $self; }