• Save
Bag of tricks
Upcoming SlideShare
Loading in...5
×
 

Bag of tricks

on

  • 4,204 views

A collection of things I often use in my Perl scripts.

A collection of things I often use in my Perl scripts.

Statistics

Views

Total Views
4,204
Views on SlideShare
4,197
Embed Views
7

Actions

Likes
10
Downloads
7
Comments
0

1 Embed 7

http://paper.li 7

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

Bag of tricks Presentation Transcript

  • 1. My PerlBag of Tricks brian d foy The Perl Review YAPC::Brasil 2011 http://slidesha.re/s06nuv
  • 2.
  • 3. • Eliminate special cases• Remove distractions• Know less• Let Perl do the work• Scale gracefully
  • 4. % perl -e "print qq(Alo Mundon)"% perl -le "print q(Alo Mundo)"
  • 5. my $string = some_sub();open my $fh, <, $string;while(<$fh>){ chomp; ...; }
  • 6. use 5.014;my $new = $old =~ s/.../.../r;foo( $old =~ s/.../.../r );print "%s %sn", $old, $old =~ s/.../.../r ;
  • 7. foreach my $file ( @files ) { open my($fh), >, $file or do { warn "... $!n"; next FILE; }; ... }
  • 8. my $data = do { local $/; <DATA> };...;__END__<?xml version="1.0"?><root>...</root>
  • 9. my $data = do { local $/; <DATA> };s|.*(?=<elem>)||; s|(?<=</elem>).*||;my $name = m|<elem>(.*?)</elem>|;__END__<?xml version="1.0"?><root>...<elem>Buster</elem></root>
  • 10. $g = q("Mimi","Bean,Buster","Roscoe");my @gatos = split /(?<="),(?=")/, $g;
  • 11. $g = q("Roscoe "","" Cat","Bean, Buster");my @gatos = split /(?<!"")(?<="),(?=")(?!"")/, $g;
  • 12. if( ref $r eq ARRAY )if( ref $r eq ref [] )if( ref $r eq ref {} )if( ref $r eq ref sub {} )if( ref $r eq ref qr// )
  • 13. join "n", @entries, ;join "nt", "t", @entries;
  • 14. BEGIN { use Foo; package Foo; no warnings qw(redefine); sub foo { ... } }
  • 15. # Git::CPAN::Patch% git cpan-init http://...... hack hack hack ...% git commit% git cpan-sendpatch
  • 16. my $file = MPEG::Info->new( ... );print join $/, map { $file->$_() } qw(acodec acodecraw achans ... );
  • 17. package Modulino { run(@ARGV) unless caller; sub run { my @args = @_; ...; } }
  • 18. if( /p{IsUppercaseRoman}/ ) { ...}# ⅠⅤⅩⅬⅭⅮⅯↁↂↇↈsub IsUppercaseRoman { return <<"CODE_NUMBERS";216021642169216C 216F2181 21822187 2188CODE_NUMBERS }
  • 19. printf %1$#b %1$#o %1$d %1$#xn", 137;# 0b10001001 0211 137 0x89
  • 20. gato( nome => Buster );sub gato { my %defaults = (...); my %config = (%defaults, @_ ); ...; }
  • 21. BEGIN { my $fixed_time = 1234567890; no warnings qw(redefine); *CORE::GLOBAL::time = sub { $fixed_time }; sub set_time { $fixed_time = $_[0] }}ok( time > $fixed_time );
  • 22. sub my_grep (&@) { my( $sub ) = shift; foreach my $arg ( @_ ) { local $_ = $arg; push @output, $arg if $sub->() } }
  • 23. my $ucfirst_and_trim = composer( &trim_front, &trim_back, &my_ucfirst );$s = $ucfirst_and_trim->($s);
  • 24. sub composer { my (@sub_refs) = @_; sub { my $string = shift; foreach my $sub_ref (@sub_refs) { $string = $sub_ref->($string); } return $string; }; }
  • 25. my @tests = ( # ARG EXPECTED LABEL [ [1,2,3], 6, Sum is 6 ], [ [-1,0,9], 8, Sum is 8 ], ... );foreach my $test ( @tests ) { is( target_sub( $test->[ARG] ), $test->[EXPECTED], $test->[LABEL] ); }
  • 26. package Local::Null::Logger { sub new { bless my $x, $_[0] } sub AUTOLOAD { shift; print @_, $/ } sub DESTROY { 1 } }sub _init_logger { my $log4perl_loaded = eval "require Log::Log4perl; 1"; unless( $log4perl_loaded ){ return Local::Null::Logger->new; } ...; }
  • 27. $object->foo->bar->baz->quux;package Class { sub bar { return Null->new if $error; } }package Null { my $null = bless {}, __PACKAGE__; sub new { $null } sub AUTOLOAD { return $_[0] } sub DESTROY { 1 } }
  • 28. Obrigadohttp://slidesha.re/s06nuv
  • 29. http://commons.wikimedia.org/wiki/File:Pelé_jump_1958.jpghttp://commons.wikimedia.org/wiki/File:Brazilian_National_Congress.jpg