Eversion 101 an Introduction to Inside-Out Objects

Total Page:16

File Type:pdf, Size:1020Kb

Eversion 101 an Introduction to Inside-Out Objects Eversion 101 An Introduction to Inside-Out Objects David Golden [email protected] June 26, 2006 YAPC::NA Image source: Michal Kosmulski Copyright © 2006 David A. Golden An introduction to the inside-out technique Inside-out objects first presented by Dutch Perl hacker Abigail in 2002 – Spring 2002 – First mention at Amsterdam.pm, – June 28, 2002 – YAPC NA "Two alternative ways of doing OO" – July 1, 2002 – First mention on Perlmonks Gained recent attention (notoriety?) as a recommended best practice with the publication of Damian Conway's Perl Best Practices Offer some interesting advantages... but at the cost of substantial complexity – Big question: Do the benefits outweight the complexity? Agenda for this tutorial: – Teach the basics – Describe the complexity – Let you decide 1 Copyright © 2006 David A. Golden Eversion 101 Lesson Plan: Five C's 001 Concepts 010 Choices 011 Code 100 Complexity 101 CPAN 2 Image sources: Michal Kosmulski,Bill Odom Copyright © 2006 David A. Golden 001 Concepts Image source: Michal Kosmulski Copyright © 2006 David A. Golden Three ideas at the core of this tutorial 1. Encapsulation using lexical closure 2. Objects as indices versus objects as containers 3. Memory addresses as unique identifiers TIMTOWTDI: Everything else is combinations and variations 4 Copyright © 2006 David A. Golden 'Classic' Perl objects reference a data structure of properties Hash-based object $obj = bless {}, "Some::Class"; Object 1 name rank serial_no Array-based object $obj = bless [], "Some::Class"; Object 2 0 1 2 3 5 Image source: Michal Kosmulski Copyright © 2006 David A. Golden Complaint #1 for classic objects: No enforced encapsulation Frequent confusion describing the encapsulation problem – Not about hiding data, algorithms or implementation choices – It is about minimizing coupling with the code that uses the object The real question: Culture versus control? – Usually a matter of strong personal opinions – Advisory encapsulation: 'double yellow lines' – Enforced encapsulation: 'Jersey barriers' The underlying challenge: Tight coupling of superclasses and subclasses – Type of reference for data storage, e.g. hashes, array, scalars, etc. – Names of keys for hashes – 'Strong' encapsulation isn't even an option 6 Copyright © 2006 David A. Golden Complaint #2: Hash key typos (and proliferating accessors) 1 A typo in the name of a property creates a bug, not an error – Code runs fine but results aren't as expected $self->{naem} = 'James'; print $self->{name}; # What happened? Accessors to the rescue (?!) – Runtime error where the typo occurs – Every property access gains function call overhead $self->naem('James'); # Runtime error here print $self->name(); My view: accessor proliferation for typo safety is probably not best practice – Private need for typo safety shouldn't drive public interface design – Couples implementation and interface 1 Locked hashes are another solution as of Perl 5.8 7 Copyright © 2006 David A. Golden Eureka! We can enforce encapsulation with lexical closure Class properties always did this Some::Class package Some::Class; my $counter; sub inc_counter { my $counter my $self = shift; inc_counter $counter++; 1 } 2 Damian Conway's flyweight pattern my @objects my @objects; new 0 1 2 3 sub new { my $class = shift; my $id = scalar @objects; name $objects[$id] = {}; rank return bless \$id, $class; get_name } serial_no sub get_name { my $self = shift; return $objects[$$self]{name}; } 2 A brief version of this was introduced in Advanced Perl Programming, 1st edition as ObjectTemplate 8 Copyright © 2006 David A. Golden 'Inside-Out' objects use an index into lexicals for each property Some::Class my %name Lexical properties Object 1 give compile-time Object 2 typo checking new Object 3 under strict! Object 4 my %rank # Correct: Object 1 $name{ $$self }; get_name Object 2 # Compiler error: Object 3 $naem{ $$self }; Object 4 my %serial_no do_stuff Object 1 Object 2 Object 3 Object 4 9 Image source: Michal Kosmulski Copyright © 2006 David A. Golden Review: 'Classic' versus 'Inside-Out' Classic: Objects as containers – Object is a reference to a data structure of properties – No enforced encapsulation – Hash-key typo problem Object 1 name rank serial_no Inside-Out: Objects as indices – Object is an index into a lexical data structure for each property – Enforced encapsulation using lexical closure – Compile-time typo protection my %name Object 2 Object 1 Object 2 Object 2 Index Object 3 Object 4 10 Image source: Michal Kosmulski Copyright © 2006 David A. Golden 010 Choices Image source: Michal Kosmulski Copyright © 2006 David A. Golden What data structure to use for inside-out properties? Object 2 Object 2 Index ? 12 Copyright © 2006 David A. Golden What data structure to use for inside-out properties? my %name Object 1 Object 2 Object 2 Object 2 Object 3 Index Object 4 my @name How to decide? 0 1 2 3 Array – Fast access – Index limited to sequential integers – Needs DESTROY to recycle indices to prevent runaway growth of property arrays Hash – Slow(er) access – Any string as index – Uses much more memory (particularly if keys are long) – Needs DESTROY to free property memory to avoid leakage 13 Copyright © 2006 David A. Golden What index? (And stored how?) Sequential number, stored in a blessed scalar – Tight coupling – subclasses must also use a blessed scalar – Subclass must use an index provided by the superclass – Unless made read-only, objects can masquerade as other objects, whether references to them exist or not! $$self = $$self + 1 my @name 0 1 2 3 Object 1 1 A unique, hard-to-guess number, stored in a blessed scalar (e.g. with Data::UUID) – Again, tight coupling – subclasses must also use a blessed scalar my %rank Object 2 8c2d4691 8c2d4691 14 Copyright © 2006 David A. Golden An alternative: use the memory address as a unique identifier Unique and consistent for the life of the object – Except under threads (needs a CLONE method) my %serial_no Object 3 0x224e40 0x224e40 ? 3 Several ways to get the memory address; only refaddr()is safe $property{ refaddr $self } Otherwise, overloading of stringification or numification can give unexpected results $property{ "$self" } $property{ $self } # like "$self" $property{ 0+$self } 3 Available in Scalar::Util 15 Copyright © 2006 David A. Golden Using the memory address directly allows 'black-box' inheritance When used directly as refaddr $self, the type of blessed reference no longer matters – Subclasses don't need to know or care what the superclass is using as a data type – Downside is slight overhead of refaddr $self for each access 4 Black-box inheritance – using a superclass object as the reference to bless – a.k.a. 'foreign inheritance' or 'opaque inheritance' – An alternative to facade/delegator/adaptor patterns and some uses of tied variables – Superclass doesn't even have to be an inside-out object use base 'Super::Class'; sub new { my $class = shift; my $self = Super::Class->new( @_ ); bless $self, $class; return $self; } There is still a problem for multiple inheritance of different base object types 4 Thanks to Boston.pm for name brainstorming 16 Copyright © 2006 David A. Golden These choices give four types of inside-out objects 9 1. Array-based properties, with sequential ID's stored in a blessed scalar – Fast and uses less memory – Insecure unless index is made read-only – Requires index recycling – Subclasses must also use a blessed scalar – no black-box inheritance ? 2. Hash-based properties, with a unique, hard-to-guess number stored in a blessed scalar – Slow and uses more memory – Robust, even under threads – Subclasses must also use a blessed scalar – no black-box inheritance 8 3. Hash-based properties, with the memory address stored in a blessed scalar – Subclasses must also use a blessed scalar – no black-box inheritance – Combines the worst of (2) and (4) for a slight speed increase 9 4. Hash-based properties, with the memory address used directly – Slow and uses more memory – Black-box inheritance possible – Not thread-safe unless using a CLONE method 17 Copyright © 2006 David A. Golden 011 Code Image source: Michal Kosmulski Copyright © 2006 David A. Golden File::Marker: a simple inside-out objects with black-box inheritance Key Features Useable directly as a filehandle (IO::File) without tying $fm = File::Marker->new( $filename ); $line = <$fm>; Set named markers for the current location in an opened file $fm->set_marker( $mark_name ); Jump to the location indicated by a marker $fm->goto_marker( $mark_name ); Let users jump back to the last jump point with a special key-word $fm->goto_marker( "LAST" ); Clear markers when opening a file $fm->open( $another_file ); # clear all markers 19 Copyright © 2006 David A. Golden File::Marker constructor use base 'IO::File'; use Scalar::Util qw( refaddr ); Full version of File::Marker available on CPAN my %MARKS = (); Uses strict and warnings Argument validation Error handling sub new { Extensive test coverage my $class = shift; Thread safety my $self = IO::File->new(); bless $self, $class; $self->open( @_ ) if @_; return $self; } sub open { my $self = shift; $MARKS{ refaddr $self } = {}; $self->SUPER::open( @_ ); $MARKS{ refaddr $self }{ 'LAST' } = $self->getpos; return 1; } 20 Copyright © 2006 David A. Golden File::Marker destructor and methods sub DESTROY { my $self = shift; delete $MARKS{ refaddr $self }; } sub set_marker { my ($self, $mark) = @_; $MARKS{ refaddr $self }{ $mark } = $self->getpos; return 1; } sub goto_marker { my ($self, $mark) = @_; my $old_position = $self->getpos; # save for LAST $self->setpos( $MARKS{ refaddr $self }{ $mark } ); $MARKS{ refaddr $self }{ 'LAST' } = $old_position; return 1; } 21 Copyright © 2006 David A. Golden Seeing it in action file_marker_example.pl textfile.txt use strict; this is line one use warnings; this is line two use File::Marker; this is line three this is line four my $fm = File::Marker->new( "textfile.txt" ); print scalar <$fm>, "--\n"; Output $fm->set_marker("line2"); this is line one -- print <$fm>, "--\n"; this is line two this is line three $fm->goto_marker("line2"); this is line four -- print scalar <$fm>; this is line two 22 Copyright © 2006 David A.
Recommended publications
  • MANNING Greenwich (74° W
    Object Oriented Perl Object Oriented Perl DAMIAN CONWAY MANNING Greenwich (74° w. long.) For electronic browsing and ordering of this and other Manning books, visit http://www.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact: Special Sales Department Manning Publications Co. 32 Lafayette Place Fax: (203) 661-9018 Greenwich, CT 06830 email: [email protected] ©2000 by Manning Publications Co. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid-free paper, and we exert our best efforts to that end. Library of Congress Cataloging-in-Publication Data Conway, Damian, 1964- Object oriented Perl / Damian Conway. p. cm. includes bibliographical references. ISBN 1-884777-79-1 (alk. paper) 1. Object-oriented programming (Computer science) 2. Perl (Computer program language) I. Title. QA76.64.C639 1999 005.13'3--dc21 99-27793 CIP Manning Publications Co. Copyeditor: Adrianne Harun 32 Lafayette
    [Show full text]
  • Java Bytecode Manipulation Framework
    Notice About this document The following copyright statements and licenses apply to software components that are distributed with various versions of the OnCommand Performance Manager products. Your product does not necessarily use all the software components referred to below. Where required, source code is published at the following location: ftp://ftp.netapp.com/frm-ntap/opensource/ 215-09632 _A0_ur001 -Copyright 2014 NetApp, Inc. All rights reserved. 1 Notice Copyrights and licenses The following component is subject to the ANTLR License • ANTLR, ANother Tool for Language Recognition - 2.7.6 © Copyright ANTLR / Terence Parr 2009 ANTLR License SOFTWARE RIGHTS ANTLR 1989-2004 Developed by Terence Parr Partially supported by University of San Francisco & jGuru.com We reserve no legal rights to the ANTLR--it is fully in the public domain. An individual or company may do whatever they wish with source code distributed with ANTLR or the code generated by ANTLR, including the incorporation of ANTLR, or its output, into commerical software. We encourage users to develop software with ANTLR. However, we do ask that credit is given to us for developing ANTLR. By "credit", we mean that if you use ANTLR or incorporate any source code into one of your programs (commercial product, research project, or otherwise) that you acknowledge this fact somewhere in the documentation, research report, etc... If you like ANTLR and have developed a nice tool with the output, please mention that you developed it using ANTLR. In addition, we ask that the headers remain intact in our source code. As long as these guidelines are kept, we expect to continue enhancing this system and expect to make other tools available as they are completed.
    [Show full text]
  • Intermediate Perl
    SECOND EDITION Intermediate Perl Randal L. Schwartz, brian d foy, and Tom Phoenix Beijing • Cambridge • Farnham • Köln • Sebastopol • Tokyo Intermediate Perl, Second Edition by Randal L. Schwartz, brian d foy, and Tom Phoenix Copyright © 2012 Randal Schwartz, brian d foy, Tom Phoenix. All rights reserved. Printed in the United States of America. Published by O’Reilly Media, Inc., 1005 Gravenstein Highway North, Sebastopol, CA 95472. O’Reilly books may be purchased for educational, business, or sales promotional use. Online editions are also available for most titles (http://my.safaribooksonline.com). For more information, contact our corporate/institutional sales department: 800-998-9938 or [email protected]. Editors: Simon St. Laurent and Shawn Wallace Indexer: Lucie Haskins Production Editor: Kristen Borg Cover Designer: Karen Montgomery Copyeditor: Absolute Service, Inc. Interior Designer: David Futato Proofreader: Absolute Service, Inc. Illustrator: Rebecca Demarest March 2006: First Edition. August 2012: Second Edition. Revision History for the Second Edition: 2012-07-20 First release See http://oreilly.com/catalog/errata.csp?isbn=9781449393090 for release details. Nutshell Handbook, the Nutshell Handbook logo, and the O’Reilly logo are registered trademarks of O’Reilly Media, Inc. Intermediate Perl, the image of an alpaca, and related trade dress are trademarks of O’Reilly Media, Inc. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this book, and O’Reilly Media, Inc., was aware of a trademark claim, the designations have been printed in caps or initial caps. While every precaution has been taken in the preparation of this book, the publisher and authors assume no responsibility for errors or omissions, or for damages resulting from the use of the information con- tained herein.
    [Show full text]
  • Perlmonks.Com with a Gaim Plug-In SEEKING WISDOM
    PROGRAMMING Perl: A Gaim Plugin Get the news from perlmonks.com with a Gaim plug-in SEEKING WISDOM irst-time visitors to perlmonks. The Gaim project offers an instant messenger client that speaks a large com are rubbing their eyes in dis- Fbelief: High-caliber Perl hackers number of protocols. We’ll show you how to extend Gaim with Perl are jumping to answer even the simplest of newbie questions. The reason for this plugins. BY MICHAEL SCHILLI is that the community assigns XP (expe- rience) points for the best replies. And the more XP you have, the higher you answer a question correctly typically However, it can take a few seconds to climb in the ranking, from a novice, to a gets the most XP. Instead of pulling the download the content of a remote web monk, and slowly to expert status. web page with the latest questions time page. Both DNS name resolution and the and time again, it makes sense to script process of retrieving the content of the Best of Class the process and have the script let you requested web page can take some time, Due to the community dynamics on know when a new query arrives. during which the CPU should return to perlmonks.com, the The pmwatcher.pl script described other tasks. The tried-and-trusted POE first person to in this issue fetches the perlmonks. [3] framework provides exactly what we com page with the Newest Nodes at need. The POE kernel runs a single pro- regular intervals, remembering cess (and only a single thread), but uses older entries and sending out an cooperative multitasking between con- instant message when it discovers current tasks to ensure that each one is new postings.
    [Show full text]
  • Pragmaticperl-Interviews-A4.Pdf
    Pragmatic Perl Interviews pragmaticperl.com 2013—2015 Editor and interviewer: Viacheslav Tykhanovskyi Covers: Marko Ivanyk Revision: 2018-03-02 11:22 © Pragmatic Perl Contents 1 Preface .......................................... 1 2 Alexis Sukrieh (April 2013) ............................... 2 3 Sawyer X (May 2013) .................................. 10 4 Stevan Little (September 2013) ............................. 17 5 chromatic (October 2013) ................................ 22 6 Marc Lehmann (November 2013) ............................ 29 7 Tokuhiro Matsuno (January 2014) ........................... 46 8 Randal Schwartz (February 2014) ........................... 53 9 Christian Walde (May 2014) .............................. 56 10 Florian Ragwitz (rafl) (June 2014) ........................... 62 11 Curtis “Ovid” Poe (September 2014) .......................... 70 12 Leon Timmermans (October 2014) ........................... 77 13 Olaf Alders (December 2014) .............................. 81 14 Ricardo Signes (January 2015) ............................. 87 15 Neil Bowers (February 2015) .............................. 94 16 Renée Bäcker (June 2015) ................................ 102 17 David Golden (July 2015) ................................ 109 18 Philippe Bruhat (Book) (August 2015) . 115 19 Author .......................................... 123 i Preface 1 Preface Hello there! You have downloaded a compilation of interviews done with Perl pro- grammers in Pragmatic Perl journal from 2013 to 2015. Since the journal itself is in Russian
    [Show full text]
  • Compiling Your Own Perl
    APPENDIX A Compiling Your Own Perl Compiling Perl on a Unix-like system is simple. First, obtain the source for Perl from CPAN (dppl6++_l]j*lanh*knc+on_+NA=@IA*dpih). Then input the following sequence of commands: p]nvtrblanh)1*4*4*p]n*cv _`lanh)1*4*4 od?kjbecqna)`ao i]ga i]gapaop oq`ki]gaejop]hh On most Unix systems, this code will result in your lanh being installed into the +qon+ hk_]h+ directory tree. If you want it installed elsewhere—for example, in the local directory in your home directory—then replace od?kjbecqna)`a with the following: od?kjbecqna)`ao)@lnabet9z+hk_]h+ which should enable you to install Perl on your computer without root access. Note that the )`ao flag uses all the default options for compiling Perl. If you know that you want nonstandard configuration, just use the flag )`a instead to be prompted for your requirements. Be aware that the source for Perl 5.10.0 requires a patch to work properly with Catalyst. This is fixed in subsequent versions of Perl 5.10. If you need to test code guaranteed to run on a wide range of systems, you should con- sider using Perl version 5.8.7. Perl versions greater than 5.8.7 contain features that were not available in earlier versions of Perl, so Perl 5.8.7 is feature complete for all versions of Perl that Catalyst will run on (version 5.8.1 and later). Put another way, versions 5.8.8 and later have new features that you can’t rely on in earlier releases.
    [Show full text]
  • Modern Perl, Fourth Edition
    Prepared exclusively for none ofyourbusiness Prepared exclusively for none ofyourbusiness Early Praise for Modern Perl, Fourth Edition A dozen years ago I was sure I knew what Perl looked like: unreadable and obscure. chromatic showed me beautiful, structured expressive code then. He’s the right guy to teach Modern Perl. He was writing it before it existed. ➤ Daniel Steinberg President, DimSumThinking, Inc. A tour de force of idiomatic code, Modern Perl teaches you not just “how” but also “why.” ➤ David Farrell Editor, PerlTricks.com If I had to pick a single book to teach Perl 5, this is the one I’d choose. As I read it, I was reminded of the first time I read K&R. It will teach everything that one needs to know to write Perl 5 well. ➤ David Golden Member, Perl 5 Porters, Autopragmatic, LLC I’m about to teach a new hire Perl using the first edition of Modern Perl. I’d much rather use the updated copy! ➤ Belden Lyman Principal Software Engineer, MediaMath It’s not the Perl book you deserve. It’s the Perl book you need. ➤ Gizmo Mathboy Co-founder, Greater Lafayette Open Source Symposium (GLOSSY) Prepared exclusively for none ofyourbusiness We've left this page blank to make the page numbers the same in the electronic and paper books. We tried just leaving it out, but then people wrote us to ask about the missing pages. Anyway, Eddy the Gerbil wanted to say “hello.” Prepared exclusively for none ofyourbusiness Modern Perl, Fourth Edition chromatic The Pragmatic Bookshelf Dallas, Texas • Raleigh, North Carolina Prepared exclusively for none ofyourbusiness Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks.
    [Show full text]
  • Perl for System Administration
    Perl for System Administration Jacinta Richardson Paul Fenwick Perl for System Administration by Jacinta Richardson and Paul Fenwick Copyright © 2006-2008 Jacinta Richardson ([email protected]) Copyright © 2006-2008 Paul Fenwick ([email protected]) Copyright © 2006-2008 Perl Training Australia (http://perltraining.com.au) Conventions used throughout this text are based upon the conventions used in the Netizen training manuals by Kirrily Robert, and found at http://sourceforge.net/projects/spork Distribution of this work is prohibited unless prior permission is obtained from the copyright holder. This training manual is maintained by Perl Training Australia, and can be found at http://www.perltraining.com.au/notes.html. This is revision 1.2 of Perl Training Australia’s "Perl for System Administrators" training manual. Table of Contents 1. About Perl Training Australia....................................................................................................... 1 Training....................................................................................................................................... 1 Consulting ................................................................................................................................... 1 Contact us.................................................................................................................................... 1 2. Introduction....................................................................................................................................
    [Show full text]
  • Snort for Dummies.Pdf
    01_568353 ffirs.qxd 6/3/04 10:07 AM Page i Snort ™ FOR DUMmIES‰ 01_568353 ffirs.qxd 6/3/04 10:07 AM Page ii 01_568353 ffirs.qxd 6/3/04 10:07 AM Page iii Snort ™ FOR DUMmIES‰ by Charlie Scott, Paul Wolfe, and Bert Hayes 01_568353 ffirs.qxd 6/3/04 10:07 AM Page iv Snort™ For Dummies® Published by Wiley Publishing, Inc. 111 River Street Hoboken, NJ 07030-5774 Copyright © 2004 by Wiley Publishing, Inc., Indianapolis, Indiana Published by Wiley Publishing, Inc., Indianapolis, Indiana Published simultaneously in Canada No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permis- sion of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the Legal Department, Wiley Publishing, Inc., 10475 Crosspoint Blvd., Indianapolis, IN 46256, (317) 572-3447, fax (317) 572-4355, e-mail: brandreview@ wiley.com. Trademarks: Wiley, the Wiley Publishing logo, For Dummies, the Dummies Man logo, A Reference for the Rest of Us!, The Dummies Way, Dummies Daily, The Fun and Easy Way, Dummies.com, and related trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates in the United States and other countries, and may not be used without written permission.
    [Show full text]
  • Beginning Perl
    ffirs.indd ii 8/9/12 2:02 PM BEGINNING PERL INTRODUCTION . xxiii CHAPTER 1 What Is Perl? . .1 CHAPTER 2 Understanding the CPAN . 25 CHAPTER 3 Variables . .41 CHAPTER 4 Working with Data . 83 CHAPTER 5 Control Flow . 125 CHAPTER 6 References . 157 CHAPTER 7 Subroutines . 175 CHAPTER 8 Regular Expressions . 219 CHAPTER 9 Files and Directories . 249 CHAPTER 10 sort, map, and grep . 287 CHAPTER 11 Packages and Modules . 315 CHAPTER 12 Object Oriented Perl . 353 CHAPTER 13 Moose . 399 CHAPTER 14 Testing . 439 CHAPTER 15 The Interwebs . 481 CHAPTER 16 Databases . 523 CHAPTER 17 Plays Well with Others. 545 CHAPTER 18 Common Tasks . 567 CHAPTER 19 The Next Steps . .611 APPENDIX Answers to Exercises . 655 INDEX . 695 ffirs.indd i 8/9/12 2:02 PM ffirs.indd ii 8/9/12 2:02 PM BEGINNING Perl ffirs.indd iii 8/9/12 2:02 PM ffirs.indd iv 8/9/12 2:02 PM BEGINNING Perl Curtis “Ovid” Poe John Wiley & Sons, Inc. ffirs.indd v 8/9/12 2:02 PM Beginning Perl Published by John Wiley & Sons, Inc. 10475 Crosspoint Boulevard Indianapolis, IN 46256 w w w.wiley.com Copyright © 2012 by John Wiley & Sons, Inc., Indianapolis, Indiana Published simultaneously in Canada ISBN: 978-1-118-01384-7 ISBN: 978-1-118-22187-7 (ebk) ISBN: 978-1-118-23563-8 (ebk) ISBN: 978-1-118-26051-7 (ebk) Manufactured in the United States of America 10 9 8 7 6 5 4 3 2 1 No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying, recording, scanning, or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher, or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600.
    [Show full text]
  • Netapp Snap Creator Framework
    Notice About this information The following copyright statements and licenses apply to open source software components that are distributed with various versions of the NetApp Snap Creator for framework software products. Your product does not necessarily use all the open source software components referred to below. Where required, source code is published at the following location: ftp://ftp.netapp.com/frm-ntap/opensource/ Copyrights and licenses The following component is subject to the Crypt DES CPAN License: ◆ Crypt::DES 2.05 Copyright © 2000 W3Works, LLC. All rights reserved Copyright © 1995, 1996 Systemics Ltd (http://www.systemics.com/).All rights reserved. This perl extension includes software developed by Eric Young ([email protected]) Modifications, including cross-platform fixups, and single-algorithm distribution packaging are Copyright © 2000 W3Works, LLC. All Rights Reserved. Mail questions and comments to Dave Paris <[email protected]>. Original distribution license (below) applies. Other parts of the library are covered by the following licence: Copyright © 1995, 1996 Systemics Ltd (http://www.systemics.com/) All rights reserved. This library and applications are FREE FOR COMMERCIAL AND NON-COMMERCIAL USE as long as the following conditions are adhered to. Copyright remains with Systemics Ltd, and as such any Copyright notices in the code are not to be removed. If this code is used in a product, Systemics should be given attribution as the author of the parts used. This can be in the form of a textual message at program startup or in documentation (online or textual) provided with the package. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1.
    [Show full text]
  • Tape Automation Scalar Key Manager, Software Release 2.4 Open Source Software Licenses
    Tape Automation Scalar Key Manager, Software Release 2.4 Open Source Software Licenses Open Source Software (OSS) Licenses for: • Scalar Key Manager, Software Release 2.4. The software installed in this product contains Open Source Software (OSS). OSS is third party software licensed under separate terms and conditions by the supplier of the OSS. Use of OSS is subject to designated license terms and the following OSS license disclosure lists the open source components and applicable licenses that are part of the Scalar Key Manager. The Scalar Key Manager, Software Release 2.4, is delivered with Ubuntu 12.04 as a base operat- ing system. Individual packages that comprise the Ubuntu distribution come with their own li- censes; the texts of these licenses are located in the packages' source code and permit you to run, copy, modify, and redistribute the software package (subject to certain obligations in some cases) both in source code and binary code forms. The following table lists open-source software components used in the Scalar Key Manager® release 2.4 that have been added to the base operating system, patched, or otherwise included with the product. For each component, the associated licenses are provided. Upon request, Quan- tum will furnish a DVD containing source code for all of these open-source modules for the ad- ditional packages listed here. The source for the ubuntu-12.04.5-alternate-amd64.iso can current- ly be found at: http://cdimage.ubuntu.com/releases/12.04/release/source/ To order a copy of the source code covered by an open source license, or to obtain information and instructions in support of any open source license terms, contact the Global Call Center: • In the USA, call 1-800-284-5101.
    [Show full text]