Sharing

2013年5月13日 星期一

Intermediate Perl 筆記 (一)

Chapter 2 Using Modules


use lib '/Users/gilligan/lib';

The use lib indeed runs at compile time, so this also doesn’t work
my $LIB_DIR = '/Users/gilligan/lib';
...
use lib $LIB_DIR;    # BROKEN
use Navigation::SeatOfPants;

Fix it with "use constant"

use constant LIB_DIR => '/Users/gilligan/lib';
...
use lib LIB_DIR;
use Navigation::SeatOfPants;

Setting the Path Outside the program


solution 1: using global variable
export PERL5LIB=/home/skipper/perl−lib

solution 2: assign include path on the command line
% perl −I/home/skipper/perl−lib /home/skipper/bin/get_us_home


Chapter 3 Intermediate Foundations

List Operation

my @input_numbers = (1, 2, 4, 8, 16, 32, 64);
my @result = map $_ + 100, @input_numbers;          # output 101, 102, 104, ...
my @result = map { $_, 3 * $_ } @input_numbers;     # output 1, 3, 2, 6, 4, 12, ...
my %hash = map { $_, 3 * $_ } @input_numbers;       # output hash { 1=>3, 2=> 6, ...}

Dereferencing the Array Reference


@ skipper                   # refer to the array
@{ $ref_skipper }           # refer to the array by reference
@$ref_skipper               # getting braces off if it is a simple scalar variable

Checking Reference Types



use Carp qw(croak);
sub show_hash {
    my $hash_ref = shift;
    my $ref_type = ref $hash_ref;
    croak "I expected a hash reference!" unless $ref_type eq 'HASH';
    croak "I expected a hash reference!" unless $ref_type eq ref {};   # another way

    foreach my $key ( %$hash_ref ) {
        ...
    }
}

# another way to accepts all objects that support "keys" function, not only hash object

use Scalar::Util qw(reftype);
sub show_hash2 {
    my $hash_ref = shift;
    my $ref_type = reftype $hash_ref; # works with objects
    croak "I expected a hash reference!" unless eval { keys %$ref_type; 1 };
    foreach my $key ( %$hash_ref ) {
        ...
    }
}


Chapter 5 References and Scoping


Nothing noted.

沒有留言: