⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch16.027_prob_ex16.8

📁 Perl Best Practices the source code
💻 8
字号:
################################################################################ Example 16.8 (NOT RECOMMENDED) from Chapter 16 of "Perl Best Practices"  ####     Copyright (c) O'Reilly & Associates, 2005. All Rights Reserved.      ####  See: http://www.oreilly.com/pub/a/oreilly/ask_tim/2001/codepolicy.html  #################################################################################  Example 16-8. When multiple inheritance attacks# Standard modules...use strict;use warnings;use IO::Prompt;use Carp;use English qw( -no_match_vars );use Data::Alias;use Readonly;my $product = Shimmer->new({ name=>'Shimmer', patent=>987654321 });package Topping::Dessert;use Class::Std::Utils;{    # Attributes...    my %name_of;    my %flavour_of;     sub new {        my ($class, $arg_ref) = @_;                my %init = extract_initializers_from($arg_ref);         my $new_object = bless anon_scalar(), $class;         $name_of{ident $new_object}    = $init{name};        $flavour_of{ident $new_object} = $init{flavour};         return $new_object;    }     sub DESTROY {        my ($self) = @_;         warn __PACKAGE__, " cleaning up $name_of{ident $self}";        delete $name_of{ident $self};        delete $flavour_of{ident $self};         return;    }}package Wax::Floor;use Class::Std::Utils;{    # Attributes...    my %name_of;    my %patent_of;     sub new {        my ($class, $arg_ref) = @_;                my %init = extract_initializers_from($arg_ref);  # from Class::Std::Utils         my $new_object = bless anon_scalar(), $class;         $name_of{ident $new_object}   = $init{name};        $patent_of{ident $new_object} = $init{patent};         return $new_object;    }     sub DESTROY {        my ($self) = @_;         warn __PACKAGE__, " cleaning up $name_of{ident $self}";        delete $name_of{ident $self};        delete $patent_of{ident $self};         return;    }}package Shimmer;use base qw( Wax::Floor  Topping::Dessert );use Class::Std::Utils;{    # Attributes...    my %name_of;    my %patent_of;     sub new {        my ($class, $arg_ref) = @_;                my %init = extract_initializers_from($arg_ref);         # Call base-class constructor to allocate and pre-initialize...        my $new_object = $class->SUPER::new($arg_ref);         $name_of{ident $new_object}    = $init{name};        $patent_of{ident $new_object} = $init{patent};         return $new_object;    }     sub DESTROY {        my ($self) = @_;         warn __PACKAGE__, " cleaning up $name_of{ident $self}";        delete $name_of{ident $self};        delete $patent_of{ident $self};         # Call base-class destructor to continue clean-up...        $self->SUPER::DESTROY();         return;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -