Quick Upload

Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
Post to Twitter Post to Twitter
Share on Facebook
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons

Utility Modules That You Should Know About

from joshua.mcadams, 9 months ago Add as contact

2454 views | 0 comments | 2 favorites | 1 embeds (Stats)

Desc: This slideshow was presented at Frozen Perl 2008 and covers a small portion of CPAN that any Perl programmer should be familiar with.

Embed customize close
 

Categories

Technology

Groups/Events

More Info

This slideshow is Public

Views: 2454 Comments: 0 Favorites: 2 Downloads: 36

View Details: 2452 on Slideshare 2 from embeds
Most viewed embeds (Top 5): More
All Embeds: Less
Flagged as inappropriate Flag as inappropriate

Flag as inappropriate

Select your reason for flagging this slideshow as inappropriate.

If needed, use the feedback form to let us know more details.

Slideshow Transcript

  1. Slide 1: josh mcadams doubleclick/performics
  2. Slide 2: use strict;
  3. Slide 3: use strict; $perl = 'frozen'; $ref = 'perl'; print $$ref, \"\\n\"; $ perl strict_refs.pl frozen
  4. Slide 4: use strict; use strict \"refs\"; $perl = 'frozen'; $ref = 'perl'; print $$ref, \"\\n\"; $ perl strict_refs.pl Can't use string (\"perl\") as a SCALAR ref while \"strict refs\" in use at strict_refs.pl line 4.
  5. Slide 5: use strict; use strict \"vars\"; $perl = 'frozen'; $ref = 'perl'; print $$ref, \"\\n\"; $ perl strict_vars.pl Global symbol \"$perl\" requires explicit package name at strict_vars.pl line 2. Global symbol \"$ref\" requires explicit package name at strict_vars.pl line 3. Global symbol \"$ref\" requires explicit package name at strict_vars.pl line 4. Execution of strict_vars.pl aborted due to compilation errors.
  6. Slide 6: use strict; use strict \"vars\"; our $perl = 'frozen'; my $ref = 'perl'; print $$ref, \"\\n\"; $ perl strict_vars.pl frozen
  7. Slide 7: use strict; use strict \"subs\"; $person = Josh; $directory{mcadams} = [ first => $person ]; print $directory{mcadams}->[1], \"\\n\"; $ perl strict_subs.pl Bareword \"Josh\" not allowed while \"strict subs\" in use at strict_subs.pl line 2. Execution of strict_subs.pl aborted due to compilation errors.
  8. Slide 8: use strict; use strict \"subs\"; $person = ‘Josh’; $directory{mcadams} = [ first => $person ]; print $directory{mcadams}->[1], \"\\n\"; $ perl strict_subs.pl Josh
  9. Slide 9: use strict; - Typically ‘use strict;’ is all that you’ll need - You can ‘no strict “refs”;’ in your code - Use the strict pragma in all of your Perl code
  10. Slide 10: use warnings;
  11. Slide 11: use warnings; perl -w script.pl #/usr/bin/perl -w
  12. Slide 12: use warnings; use warnings; no warnings;
  13. Slide 13: use base;
  14. Slide 14: use base; push @ISA, ‘SomeModule’;
  15. Slide 15: use base; use base qw(SomeModule);
  16. Slide 16: use constant;
  17. Slide 17: use constant; use warnings; use strict; use constant DO_NOT_DISTURB => 1; print \"leave me alone\\n\" if DO_NOT_DISTURB; > perl constant.pl leave me alone
  18. Slide 18: use Exporter;
  19. Slide 19: use Exporter; use MyPackage; MyPackage::my_subroutine();
  20. Slide 20: use Exporter; package MyPackage; use warnings; use strict; use Exporter qw(import); our @EXPORT_OK = qw(my_subroutine); sub my_subroutine { print \"hello\\n\"; } 1;
  21. Slide 21: use Exporter; use warnings; use strict; use MyPackage qw(my_subroutine); my_subroutine();
  22. Slide 22: use Data::Dumper;
  23. Slide 23: use Data::Dumper; use warnings; use strict; use Data::Dumper; print Dumper \\@ARGV; > perl datadumper.pl hello frozen perl $VAR1 = [ 'hello', 'frozen', 'perl' ];
  24. Slide 24: use Class::Accessor;
  25. Slide 25: use Class::Accessor; sub name { my ($self, $value) = @_; $self->{name} = $value if $value; return $self->{name}; }
  26. Slide 26: use Class::Accessor; package MyClass; use base qw(Class::Accessor); __PACKAGE__->mk_accessors(qw(name));
  27. Slide 27: use Carp;
  28. Slide 28: use Carp; 1 package PackageOne; 2 3 sub y { z(); } 4 sub z { die('oops'); } 5 6 package PackageTwo; $ perl die.pl 7 oops at die.pl line 4. 8 sub a { b(); } 9 sub b { PackageOne::y(); } 10 11 package main; 12 13 PackageTwo::a();
  29. Slide 29: use Carp; 1 package PackageOne; 2 3 use Carp; 4 5 sub y { z(); } 6 sub z { croak('oops'); } 7 $ perl croak.pl 8 package PackageTwo; oops at croak.pl line 11 9 10 sub a { b(); } 11 sub b { PackageOne::y(); } 12 13 package main; 14 15 PackageTwo::a();
  30. Slide 30: use Carp; 1 package PackageOne; 2 3 use Carp qw(confess); 4 $ perl confess.pl 5 sub y { z(); } oops at confess.pl line 6 6 sub z { confess('oops'); } PackageOne::z() called at 7 confess.pl line 5 PackageOne::y() called at 8 package PackageTwo; confess.pl line 11 9 PackageTwo::b() called at 10 sub a { b(); } confess.pl line 10 11 sub b { PackageOne::y(); } PackageTwo::a() called at 12 confess.pl line 15 13 package main; 14 15 PackageTwo::a();
  31. Slide 31: use Carp; caller’s standard full stacktrace perspective warn carp cluck die croak confess
  32. Slide 32: use Carp::Assert;
  33. Slide 33: use Carp::Assert; use Carp::Assert; assert( 1 > 0 ); affirm { my $name = 'Josh'; my @attendees = qw( Josh Heather Addy ); grep { $_ eq $name } @attendees; } > perl assert.pl
  34. Slide 34: use Carp::Assert; use Carp::Assert; assert( 1 > 2); affirm { my $name = 'Josh'; my @attendees = qw( Josh Heather Addy ); grep { $_ eq $name } @attendees; } > perl assert.pl Assertion failed! at /opt/local/lib/perl5/site_perl/5.8.8/Carp/Assert.pm line 281 Carp::Assert::assert('') called at assert.pl line 5
  35. Slide 35: use Carp::Assert; use Carp::Assert; assert( 1 > 0); affirm { my $name = 'Joshua'; my @attendees = qw( Josh Heather Addy ); grep { $_ eq $name } @attendees; } > perl assert.pl Assertion ({ use warnings; use strict 'refs'; my $name = 'Joshua'; my(@attendees) = ('Josh', 'Heather', 'Addy'); grep {$_ eq $name;} @attendees; }) failed! at /opt/local/lib/perl5/site_perl/5.8.8/Carp/Assert.pm line 340 Carp::Assert::affirm('CODE(0x1800ee0)') called at assert.pl line 11
  36. Slide 36: use File::Spec;
  37. Slide 37: use File::Spec; use warnings; use strict; use File::Spec; my @dirs = File::Spec->splitdir($0); print '[', join('][', @dirs), \"]\\n\"; my $dir = File::Spec->join(@dirs); print $dir, \"\\n\"; > perl /Users/joshua/examples/filespec.pl [][Users][joshua][examples][filespec.pl] /Users/joshua/examples/filespec.pl
  38. Slide 38: use File::stat;
  39. Slide 39: use File::stat; my ($dev,$ino,$mode,$nlink,$uid, $gid,$rdev,$size,$atime,$mtime, $ctime,$blksize,$blocks) = stat ($filename);
  40. Slide 40: use File::stat; use warnings; use strict; use File::stat; my $s = stat($0); print $s->size, \"\\n\"; > perl filestat.pl 84
  41. Slide 41: use File::Slurp;
  42. Slide 42: use File::Slurp; { local(*INPUT, $/); open (INPUT, $file) || die \"can't open $file: $!\"; $var = <INPUT>; }
  43. Slide 43: use File::Slurp; my $text = read_file( $file ); my @lines = read_file( $file );
  44. Slide 44: use File::Slurp; write_file( $filename, @data );
  45. Slide 45: use File::Copy;
  46. Slide 46: use File::Copy; use warnings; use strict; use File::Copy; my $command = \"cp $0 $0.bkup\"; `$command`;
  47. Slide 47: use File::Copy; use warnings; use strict; use File::Copy; copy $0, $0 . '.bkup' or die $!;
  48. Slide 48: use File::Temp;
  49. Slide 49: use File::Temp; use warnings; use strict; use File::Temp; my $fh = File::Temp->new( UNLINK => 1 ); print $fh->filename, \"\\n\"; > perl tempfile.pl /tmp/yZin81tl6z
  50. Slide 50: use File::Temp; use warnings; use strict; use File::Temp; my $fh = File::Temp->newdir( CLEANUP => 1 ); print $fh->dirname, \"\\n\"; > perl tempdir.pl /tmp/HggvehyAyw
  51. Slide 51: use File::Find;
  52. Slide 52: use File::Find; use warnings; use strict; use File::Find; find( sub { print \"$File::Find::name\\n\" }, '/Users/joshua/' ); > perl filefind.pl /Users/joshua/...
  53. Slide 53: use File::Next;
  54. Slide 54: use File::Next; use warnings; use strict; use File::Next; my $files = File::Next::files( '/Users/joshua/' ); while ( defined ( my $file = $files->() ) ) { print \"$file\\n\"; } > perl filenext.pl /Users/joshua/...
  55. Slide 55: use File::Basename;
  56. Slide 56: use File::Basename; use warnings; use strict; use File::Basename; my $file = basename $0; my $path = dirname $0; my ($file2, $path2) = fileparse $0; print join(\"\\n\", $file, $path, $file2, $path2), \"\\n\"; > perl /Users/joshua/examples/basename.pl basename.pl /Users/joshua/examples basename.pl /Users/joshua/examples/
  57. Slide 57: use File::HomeDir;
  58. Slide 58: use File::HomeDir; use warnings; use strict; use File::HomeDir; print File::HomeDir->my_home(), \"\\n\"; print File::HomeDir->my_data(), \"\\n\"; > perl filehomedir.pl /Users/joshua /Users/joshua/Library/Application Support
  59. Slide 59: use IO::File;
  60. Slide 60: use IO::File; use warnings; use strict; my $fh; open( $fh, '<', $0 ) or die $!; print while(<$fh>); close $fh;
  61. Slide 61: use IO::File; use warnings; use strict; use IO::File; my $fh = IO::File->new( $0, 'r' ); print while(<$fh>); $fh->close;
  62. Slide 62: use FindBin;
  63. Slide 63: use FindBin; package MyModule; use warnings; use strict; sub hello { print \"hello\\n\"; } 1;
  64. Slide 64: use FindBin; use warnings; use strict; use lib 'mylib'; use MyModule; MyModule::hello(); > perl findbin.pl hello
  65. Slide 65: use FindBin; > perl ~/bin/findbin.pl Can't locate MyModule.pm in @INC (@INC contains: mylib / opt/local/lib/perl5/5.8.8/darwin-2level /opt/local/lib/ perl5/5.8.8 /opt/local/lib/perl5/site_perl/5.8.8/ darwin-2level /opt/local/lib/perl5/site_perl/5.8.8 /opt/ local/lib/perl5/site_perl /opt/local/lib/perl5/ vendor_perl/5.8.8/darwin-2level /opt/local/lib/perl5/ vendor_perl/5.8.8 /opt/local/lib/perl5/vendor_perl .) at Utility Modules That You Should Know About/findbin.pl line 4. BEGIN failed--compilation aborted at Utility Modules That You Should Know About/findbin.pl line 4.
  66. Slide 66: use FindBin; use warnings; use strict; use FindBin; use lib \"$FindBin::Bin/../mylib\"; use MyModule; MyModule::hello();
  67. Slide 67: use Getopt::Long;
  68. Slide 68: use Getopt::Long; use Getopt::Long; GetOptions( 'greeting=s', 'person=s', 'prefix:s' ) or die('error'); print join( q[ ], $opt_greeting, ($opt_prefix || q[]), $opt_person), \"\\n\"; > perl getopt1.pl --greeting=hello --person=josh --prefix= hello josh
  69. Slide 69: use Getopt::Long; use warnings; use strict; use Getopt::Long; my ($greeting, $person, $prefix); GetOptions( 'greeting=s' => \\$greeting, 'person=s' => \\$person, 'prefix:s' => \\$prefix, ) or die('error'); print join( q[ ], $greeting, ($prefix || q[]), $person), \"\\n\";
  70. Slide 70: use Getopt::Long; use warnings; use strict; use Getopt::Long; my %options; GetOptions( \\%options, 'greeting=s', 'person=s', 'prefix:s', ) or die('error'); print join( q[ ], @options{ qw(greeting prefix person) } ), \"\\n\";
  71. Slide 71: use Pod::Usage;
  72. Slide 72: use Pod::Usage; use Getopt::Long; use Pod::Usage; GetOptions('help', 'man') or pod2usage(2); pod2usage(1) if $opt_help; pod2usage(-verbose => 2) if $opt_man; __END__
  73. Slide 73: use Pod::Usage; =head1 NAME sample - Using GetOpt::Long and Pod::Usage =head1 SYNOPSIS sample [options] Options: -help brief help message -man full documentation =head1 OPTIONS =over 8 =item B<-help> Print a brief help message and exits. =item B<-man> Prints the manual page and exits. =back =head1 DESCRIPTION Sample is exactly that, a sample. =cut
  74. Slide 74: use Pod::Usage; > perl pod_usage.pl -h Usage: pod_usage [options] Options: -help brief help message -man full documentation Options: -help Print a brief help message and exits. -man Prints the manual page and exits.
  75. Slide 75: use Pod::Usage; > perl pod_usage.pl -m POD_USAGE(1) User Contributed Perl Documentation POD_USAGE(1) NAME pod_usage - Using GetOpt::Long and Pod::Usage SYNOPSIS pod_usage [options] Options: -help brief help message -man full documentation OPTIONS -help Print a brief help message and exits. -man Prints the manual page and exits. DESCRIPTION pod_usage just an example. perl v5.8.8 2008-02-16 POD_USAGE(1)
  76. Slide 76: thank you
  77. Slide 77: yapc.org/America