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
-
thomasfahle favorited this 9 months ago
-
Added to the group Frozen Perl by brian_d_foy
-
dpavlin favorited this 9 months ago
-
Slideshow Transcript
- Slide 1: josh mcadams doubleclick/performics
- Slide 2: use strict;
- Slide 3: use strict; $perl = 'frozen'; $ref = 'perl'; print $$ref, \"\\n\"; $ perl strict_refs.pl frozen
- 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.
- 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.
- Slide 6: use strict; use strict \"vars\"; our $perl = 'frozen'; my $ref = 'perl'; print $$ref, \"\\n\"; $ perl strict_vars.pl frozen
- 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.
- Slide 8: use strict; use strict \"subs\"; $person = ‘Josh’; $directory{mcadams} = [ first => $person ]; print $directory{mcadams}->[1], \"\\n\"; $ perl strict_subs.pl Josh
- 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
- Slide 10: use warnings;
- Slide 11: use warnings; perl -w script.pl #/usr/bin/perl -w
- Slide 12: use warnings; use warnings; no warnings;
- Slide 13: use base;
- Slide 14: use base; push @ISA, ‘SomeModule’;
- Slide 15: use base; use base qw(SomeModule);
- Slide 16: use constant;
- 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
- Slide 18: use Exporter;
- Slide 19: use Exporter; use MyPackage; MyPackage::my_subroutine();
- 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;
- Slide 21: use Exporter; use warnings; use strict; use MyPackage qw(my_subroutine); my_subroutine();
- Slide 22: use Data::Dumper;
- 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' ];
- Slide 24: use Class::Accessor;
- Slide 25: use Class::Accessor; sub name { my ($self, $value) = @_; $self->{name} = $value if $value; return $self->{name}; }
- Slide 26: use Class::Accessor; package MyClass; use base qw(Class::Accessor); __PACKAGE__->mk_accessors(qw(name));
- Slide 27: use Carp;
- 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();
- 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();
- 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();
- Slide 31: use Carp; caller’s standard full stacktrace perspective warn carp cluck die croak confess
- Slide 32: use Carp::Assert;
- 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
- 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
- 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
- Slide 36: use File::Spec;
- 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
- Slide 38: use File::stat;
- Slide 39: use File::stat; my ($dev,$ino,$mode,$nlink,$uid, $gid,$rdev,$size,$atime,$mtime, $ctime,$blksize,$blocks) = stat ($filename);
- Slide 40: use File::stat; use warnings; use strict; use File::stat; my $s = stat($0); print $s->size, \"\\n\"; > perl filestat.pl 84
- Slide 41: use File::Slurp;
- Slide 42: use File::Slurp; { local(*INPUT, $/); open (INPUT, $file) || die \"can't open $file: $!\"; $var = <INPUT>; }
- Slide 43: use File::Slurp; my $text = read_file( $file ); my @lines = read_file( $file );
- Slide 44: use File::Slurp; write_file( $filename, @data );
- Slide 45: use File::Copy;
- Slide 46: use File::Copy; use warnings; use strict; use File::Copy; my $command = \"cp $0 $0.bkup\"; `$command`;
- Slide 47: use File::Copy; use warnings; use strict; use File::Copy; copy $0, $0 . '.bkup' or die $!;
- Slide 48: use File::Temp;
- 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
- 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
- Slide 51: use File::Find;
- 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/...
- Slide 53: use File::Next;
- 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/...
- Slide 55: use File::Basename;
- 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/
- Slide 57: use File::HomeDir;
- 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
- Slide 59: use IO::File;
- Slide 60: use IO::File; use warnings; use strict; my $fh; open( $fh, '<', $0 ) or die $!; print while(<$fh>); close $fh;
- Slide 61: use IO::File; use warnings; use strict; use IO::File; my $fh = IO::File->new( $0, 'r' ); print while(<$fh>); $fh->close;
- Slide 62: use FindBin;
- Slide 63: use FindBin; package MyModule; use warnings; use strict; sub hello { print \"hello\\n\"; } 1;
- Slide 64: use FindBin; use warnings; use strict; use lib 'mylib'; use MyModule; MyModule::hello(); > perl findbin.pl hello
- 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.
- Slide 66: use FindBin; use warnings; use strict; use FindBin; use lib \"$FindBin::Bin/../mylib\"; use MyModule; MyModule::hello();
- Slide 67: use Getopt::Long;
- 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
- 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\";
- 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\";
- Slide 71: use Pod::Usage;
- 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__
- 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
- 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.
- 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)
- Slide 76: thank you
- Slide 77: yapc.org/America

