• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Bag of tricks
 

Bag of tricks

on

  • 3,918 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
3,918
Views on SlideShare
3,911
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 Bag of tricks Presentation Transcript

    • My PerlBag of Tricks brian d foy The Perl Review YAPC::Brasil 2011 http://slidesha.re/s06nuv
    • • Eliminate special cases• Remove distractions• Know less• Let Perl do the work• Scale gracefully
    • % perl -e "print qq(Alo Mundon)"% perl -le "print q(Alo Mundo)"
    • my $string = some_sub();open my $fh, <, $string;while(<$fh>){ chomp; ...; }
    • use 5.014;my $new = $old =~ s/.../.../r;foo( $old =~ s/.../.../r );print "%s %sn", $old, $old =~ s/.../.../r ;
    • foreach my $file ( @files ) { open my($fh), >, $file or do { warn "... $!n"; next FILE; }; ... }
    • my $data = do { local $/; <DATA> };...;__END__<?xml version="1.0"?><root>...</root>
    • my $data = do { local $/; <DATA> };s|.*(?=<elem>)||; s|(?<=</elem>).*||;my $name = m|<elem>(.*?)</elem>|;__END__<?xml version="1.0"?><root>...<elem>Buster</elem></root>
    • $g = q("Mimi","Bean,Buster","Roscoe");my @gatos = split /(?<="),(?=")/, $g;
    • $g = q("Roscoe "","" Cat","Bean, Buster");my @gatos = split /(?<!"")(?<="),(?=")(?!"")/, $g;
    • 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// )
    • join "n", @entries, ;join "nt", "t", @entries;
    • BEGIN { use Foo; package Foo; no warnings qw(redefine); sub foo { ... } }
    • # Git::CPAN::Patch% git cpan-init http://...... hack hack hack ...% git commit% git cpan-sendpatch
    • my $file = MPEG::Info->new( ... );print join $/, map { $file->$_() } qw(acodec acodecraw achans ... );
    • package Modulino { run(@ARGV) unless caller; sub run { my @args = @_; ...; } }
    • if( /p{IsUppercaseRoman}/ ) { ...}# ⅠⅤⅩⅬⅭⅮⅯↁↂↇↈsub IsUppercaseRoman { return <<"CODE_NUMBERS";216021642169216C 216F2181 21822187 2188CODE_NUMBERS }
    • printf %1$#b %1$#o %1$d %1$#xn", 137;# 0b10001001 0211 137 0x89
    • gato( nome => Buster );sub gato { my %defaults = (...); my %config = (%defaults, @_ ); ...; }
    • 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 );
    • sub my_grep (&@) { my( $sub ) = shift; foreach my $arg ( @_ ) { local $_ = $arg; push @output, $arg if $sub->() } }
    • my $ucfirst_and_trim = composer( &trim_front, &trim_back, &my_ucfirst );$s = $ucfirst_and_trim->($s);
    • sub composer { my (@sub_refs) = @_; sub { my $string = shift; foreach my $sub_ref (@sub_refs) { $string = $sub_ref->($string); } return $string; }; }
    • 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] ); }
    • 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; } ...; }
    • $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 } }
    • Obrigadohttp://slidesha.re/s06nuv
    • http://commons.wikimedia.org/wiki/File:Pelé_jump_1958.jpghttp://commons.wikimedia.org/wiki/File:Brazilian_National_Congress.jpg