📄 employeeclosure.pm
字号:
#!/usr/bin/perl
# Fig. 14.16: EmployeeClosure.pm
# Encapsulating data using closures.
package EmployeeClosure;
use strict;
use warnings;
use Date;
sub new
{
my $object = shift();
my $class = ref( $object ) || $object;
my $employee = { firstName => shift(),
lastName => shift(), };
my $hireDay = new Date;
if ( $_[ 0 ] ) {
my ( $month, $day, $year ) = split( /\//, $_[ 0 ] );
$hireDay->day( $day );
$hireDay->month( $month );
$hireDay->year( $year );
}
$employee->{ hireDay } = $hireDay;
my $self = sub {
my $field = shift();
$employee->{ $field } = shift() if ( @_ );
return $employee->{ $field };
};
bless( $self, $class );
return $self;
}
sub firstName
{
my $self = shift();
&{ $self }( "firstName", @_ );
}
sub lastName
{
my $self = shift();
&{ $self }( "lastName", @_ );
}
sub hireDay
{
my $self = shift();
my $date = &{ $self }( "hireDay" );
$date->setDate( @_ ) if ( @_ );
return $date;
}
sub write
{
my $self = shift();
print( "Hello, my name is ", $self->( 'firstName' ), ".\n" );
print( "I was hired on " );
my $date = $self->( 'hireDay' );
$date->print();
print( ".\n" );
}
return 1;
###########################################################################
# (C) Copyright 2001 by Deitel & Associates, Inc. and Prentice Hall. #
# All Rights Reserved. #
# DISCLAIMER: The authors and publisher of this book have used their #
# best efforts in preparing the book. These efforts include the #
# development, research, and testing of the theories and programs #
# to determine their effectiveness. The authors and publisher make #
# no warranty of any kind, expressed or implied, with regard to these #
# programs or to the documentation contained in these books. The authors #
# and publisher shall not be liable in any event for incidental or #
# consequential damages in connection with, or arising out of, the #
# furnishing, performance, or use of these programs. #
###########################################################################
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -