Perl class
This is class of Perl
Topics
Class steps
- Create .pm file(file name start with large letter)
- Add package first line, the name is same as file name
- The file should be finished by true statement 1;
Example
Person.pm
package Person; use strict; sub printHello { print("Hello World!"); } 1;
How to use that
#!/usr/bin/perl -w use strict; use warnings; use Person; Person::printHello; # this is class method
This is in case of same directory.
Constructor
This is the simplest constructor
Actually, name is arbitrary, but new is tacit rule.
sub new { my $class = shift; # package name copy instance to class my $self = {}; # create hash ref return bless $self, $class; # 1, data, 2 class name }
Usage
my $person = Person->new();
with params
sub new { my $class = shift; my $self = { Name => 'none', Age => 20, }; return bless $self, $class; }
getter/setter
We need to add getter/setter by ourselves.
This is an example
sub name { my $self = shift; if( @_ ){ $self->{Name} = shift } return $self->{Name}; } sub age { my $self = shift; if( @_ ){ $self->{Age} = shift } return $self->{Age}; }
Testing
$person = Person->new(); print "name:" . $person->name() . "\n"; $person->name("Sato"); print "name:" . $person->name() . "\n";
Params Constructor
package Black; use strict; use warnings; sub new { my $class = shift; my $name = shift; bless { name => $name, }, $class; } sub name { my $self = shift; if( @_ ){ $self->{name} = shift } return $self->{name}; } sub print_name { my $self = shift; print "Name is ", $self->name, "\n"; } 1;
Use one more shift; and set parameter.
my $black = Black->new(“Rena”);
$black->print_name(%