Perl Tutorial

Download Report

Transcript Perl Tutorial

Perl Tutorial - 2
林光龍
Memory Address (1/2)
• A number that is assigned to each byte in a
computer’s memory that the CPU uses to track
where data and instructions are stored in RAM.
Each byte is assigned a memory address
whether or not it is being used to store data. The
computer’s CPU uses the address bus to
communicate which memory address it wants to
access, and the memory controller reads the
address and then puts the data stored in that
memory address back onto the address bus for
the CPU to use.
Memory Address (2/2)
$b = 17;
$a = \$b;
$b[2]
$b[1]
$a
@b $b[0]
$c{“k3”}
$c{“k2”}
%c $c{“k1”}
$b[2]
$b[1]
@b $b[0]
$a
$c{“k3”}
$c{“k2”}
\$a
\@a %c
$c{“k1”}
\%c
Reference
• A reference is a scalar value that points to a
memory location that holds some type of data.
$a = 10;
@b = (1, 2, 3);
%c = ("k1" => "foo", "k2" => "bar");
$add_of_a = \$a;
$add_of_b = \@b;
$add_of_c = \%c;
print <<"END";
The address of \$a is $add_of_a
The address of \@b is $add_of_b
The address of \%b is $add_of_c
END
Multi-Dimensional Array
@array1 = ('20020701', 'Sending Mail in Perl', 'Philip Yuson');
@array2 = ('20020601', 'Manipulating Dates in Perl', 'Philip Yuson');
@array3 = ('20020501', 'GUI Application for CVS', 'Philip Yuson');
@main = (@array1, @array2, @array3);
The result would be similar to this:
@main = ('20020701', 'Sending Mail in Perl', 'Philip Yuson',
'20020601', 'Manipulating Dates in Perl', 'Philip Yuson',
'20020501', 'GUI Application for CVS', 'Philip Yuson');
Multi-Dimensional Array
Instead of pumping these into one list, you can put the
references of these arrays in the list:
@main = (\@array1, \@array2, \@array3);
Or to simplify:
@main = ( ['20020701', 'Sending Mail in Perl', 'Philip Yuson'],
['20020601', 'Manipulating Dates in Perl', 'Philip Yuson'],
['20020501', 'GUI Application for CVS', 'Philip Yuson']);
To Get Value in Multi-Dimensional Array (1/2)
To reference the first column of the first row:
$ref = $main[0]; # set $ref to reference of @array1
$ref->[0]; # Returns the first item in @array
To simplify:
$main[0]->[0];
You can also simplify this as:
$main[0][0];
To get the value of the second column of the third row:
$ref = $main[2]; # Third row;
$ref->[1]; # second column;
To Get Value in Multi-Dimensional Array (2/2)
use strict;
my @john = (86, 77, 82, 90);
my @paul = (88, 70, 92, 65);
my @may = (71, 64, 68, 78);
my @grades = (\@john, \@paul, \@may);
for (my $row = 0; $row < $#grades+1; $row++) {
for (my $col = 0; $col < $#{$grades[$row]}+1; $col++) {
print $grades[$row][$col] . ", ";
}
print "\n";
}
Associative Array (1/2)
• Scalar is the simplest Perl data type which was
designed to hold only one thing like a number, a
string or a reference.
• A list is an ordered collection of scalars. An array
is a variable that contains a list.
• A hash is a data structure like an array, in that it
can hold any number of values and retrieve
these values at will. However, instead of
indexing the values by number, as we did with
arrays, we'll look up the values by name. That is,
the indices (here, we'll call them keys) aren't
numbers but are arbitrary unique strings
Associative Array (2/2)
$x
$y
Creating a Hash
my %weekdays = (
'Sun' => 'Sunday',
'Mon' => 'Monday',
'Tue' => 'Tuesday',
'Wed' => 'Wednesday',
'Thu' => 'Thursday',
'Fri' => 'Friday',
'Sat' => 'Saturday',
);
my %month = (
'January' => '01',
'February' => '02',
'March' => '03',
'April' => '04',
'May' => '05',
'June' => '06',
'July' => '07',
'August' => '08',
'September' => '09',
'October' => '10',
'November' => '11',
'December' => '12',
);
Hash Operation
• Retrieving a value from a hash.
my $day_of_the_week = $weekdays{'Wed'};
• Adding new key/values to a hash.
$weekdays{'some'} = 'someday';
• Changing the value of an existing hash key.
$weekdays{'some'} = 'some day';
• Deleting a key/value from a hash.
delete $weekdays{'some'};
Hash Function
• keys(%hashname)
• values(%hashname)
• each(%hashname)
Reference
• Perl Tutorial: Start,
– http://www.comp.leeds.ac.uk/Perl/start.html
– http://www.cyut.edu.tw/~hcchen/perl/Perl%20tutorial%20Start.ht
m (Big5 Version)
• The perl.ogr Online Library,
http://www.perl.org/books/library.html
• Beginning Perl – perl.org
http://www.perl.org/books/beginning-perl/
• Perl For CGI tutorials
http://www.developingwebs.net/perl/
17
• A. D. Marshall, Practical Perl Programming, 1999-2005,
http://www.cs.cf.ac.uk/Dave/PERL/perl_caller.html
• Simon Cozens, Ten Perl Myths, February 23, 2000,
http://www.perl.com/pub/a/2000/01/10PerlMyths.html
• 簡信昌, Perl 學習手札全文,
http://perl.hcchien.org/toc.html
• 朱孝國, Perl 筆記, http://irw.ncut.edu.tw/peterju/perl.html
• Perl的安全性監測,
http://www.linuxuser.com.tw/skill_detail.php?cid=869
• Programmer's File Editor,
http://www.lancs.ac.uk/staff/steveb/cpaap/pfe/default.htm
• The CPAN Search Site, http://search.cpan.org/
• Regular Expression Tutorial, http://www.regularexpressions.info/tutorial.html
18