📄 computer.pl
字号:
package StoreItem;
my $_sales_tax = 8.5; # 8.5% added to all components's post rebate price
sub new {
my ($pkg, $name, $price, $rebate) = @_;
bless {
_name => $name, _price => $price, _rebate => $rebate
}, $pkg;
}
# Accessor functions
sub sales_tax {shift; @_ ? $_sales_tax = shift : $_sales_tax};
sub name {my $obj = shift; @_ ? $obj->{_name} = shift : $obj->{_name}};
sub rebate {my $obj = shift; @_ ? $obj->{_rebate} = shift : $obj->{_rebate}};
sub price {my $obj = shift;
@_ ? $obj->{_price} = shift
: $obj->{_price} - $obj->rebate
}
sub net_price {
my $obj = shift;
return $obj->price * (1 + $obj->sales_tax / 100);
}
1;
#--------------------------------------------------------------------------
package Component;
@ISA = qw(StoreItem);
1;
#--------------------------------------------------------------------------
package Monitor;
@ISA = qw (StoreItem);
# Hard-code prices and rebates for now
sub new { $pkg = shift; $pkg->SUPER::new("Monitor", 400, 15)}
1;
#--------------------------------------------------------------------------
package CDROM;
@ISA = qw (StoreItem);
sub new { $pkg = shift; $pkg->SUPER::new("CDROM", 200, 5)}
1;
#--------------------------------------------------------------------------
package Computer;
@ISA = qw (StoreItem);
sub new {
my $pkg = shift;
my $obj = $pkg->SUPER::new("Computer", 0, 0); # Dummy value for price
$obj->{components} = []; # list of components
$obj->components(@_);
$obj;
}
sub components {
my $obj = shift;
@_ ? push (@{$obj->{components}}, @_)
: @{$obj->{components}};
}
sub price {
my $obj = shift;
my $price = 0;
foreach my $component ($obj->components()) {
$price += $component->price();
}
$price;
}
package main;
$mon = new Monitor ("Sony Trinitron");
$cdrom = new CDROM ("Seagate SD2200");
$comp = new Computer ($mon, $cdrom);
print $comp->net_price();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -