4. use strict;
use strict quot;refsquot;;
$perl = 'frozen';
$ref = 'perl';
print $$ref, quot;nquot;;
$ perl strict_refs.pl
Can't use string (quot;perlquot;) as a SCALAR ref while quot;strict refsquot; in use
at strict_refs.pl line 4.
5. use strict;
use strict quot;varsquot;;
$perl = 'frozen';
$ref = 'perl';
print $$ref, quot;nquot;;
$ perl strict_vars.pl
Global symbol quot;$perlquot; requires explicit package name at strict_vars.pl line 2.
Global symbol quot;$refquot; requires explicit package name at strict_vars.pl line 3.
Global symbol quot;$refquot; requires explicit package name at strict_vars.pl line 4.
Execution of strict_vars.pl aborted due to compilation errors.
6. use strict;
use strict quot;varsquot;;
our $perl = 'frozen';
my $ref = 'perl';
print $$ref, quot;nquot;;
$ perl strict_vars.pl
frozen
7. use strict;
use strict quot;subsquot;;
$person = Josh;
$directory{mcadams} = [ first => $person ];
print $directory{mcadams}->[1], quot;nquot;;
$ perl strict_subs.pl
Bareword quot;Joshquot; not allowed while quot;strict subsquot; in use at
strict_subs.pl line 2.
Execution of strict_subs.pl aborted due to compilation errors.
8. use strict;
use strict quot;subsquot;;
$person = ‘Josh’;
$directory{mcadams} = [ first => $person ];
print $directory{mcadams}->[1], quot;nquot;;
$ perl strict_subs.pl
Josh
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
17. use constant;
use warnings;
use strict;
use constant DO_NOT_DISTURB => 1;
print quot;leave me alonenquot; if DO_NOT_DISTURB;
> perl constant.pl
leave me alone
20. use Exporter;
package MyPackage;
use warnings;
use strict;
use Exporter qw(import);
our @EXPORT_OK = qw(my_subroutine);
sub my_subroutine {
print quot;hellonquot;;
}
1;
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. 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. 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. use Carp;
caller’s
standard full stacktrace
perspective
warn carp cluck
die croak confess
37. use File::Spec;
use warnings;
use strict;
use File::Spec;
my @dirs = File::Spec->splitdir($0);
print '[', join('][', @dirs), quot;]nquot;;
my $dir = File::Spec->join(@dirs);
print $dir, quot;nquot;;
> perl /Users/joshua/examples/filespec.pl
[][Users][joshua][examples][filespec.pl]
/Users/joshua/examples/filespec.pl
49. use File::Temp;
use warnings;
use strict;
use File::Temp;
my $fh = File::Temp->new( UNLINK => 1 );
print $fh->filename, quot;nquot;;
> perl tempfile.pl
/tmp/yZin81tl6z
50. use File::Temp;
use warnings;
use strict;
use File::Temp;
my $fh = File::Temp->newdir( CLEANUP => 1 );
print $fh->dirname, quot;nquot;;
> perl tempdir.pl
/tmp/HggvehyAyw
52. use File::Find;
use warnings;
use strict;
use File::Find;
find( sub { print quot;$File::Find::namenquot; },
'/Users/joshua/' );
> perl filefind.pl
/Users/joshua/...
54. use File::Next;
use warnings;
use strict;
use File::Next;
my $files = File::Next::files( '/Users/joshua/' );
while ( defined ( my $file = $files->() ) ) {
print quot;$filenquot;;
}
> perl filenext.pl
/Users/joshua/...
58. use File::HomeDir;
use warnings;
use strict;
use File::HomeDir;
print File::HomeDir->my_home(), quot;nquot;;
print File::HomeDir->my_data(), quot;nquot;;
> perl filehomedir.pl
/Users/joshua
/Users/joshua/Library/Application Support
64. use FindBin;
use warnings;
use strict;
use lib 'mylib';
use MyModule;
MyModule::hello();
> perl findbin.pl
hello
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. use FindBin;
use warnings;
use strict;
use FindBin;
use lib quot;$FindBin::Bin/../mylibquot;;
use MyModule;
MyModule::hello();
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), quot;nquot;;
> perl getopt1.pl --greeting=hello --person=josh --prefix=
hello josh
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), quot;nquot;;
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)
} ),
quot;nquot;;
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. 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. 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. 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)