[ Index ]

PHP Cross Reference of Unnamed Project

title

Body

[close]

/se3-unattended/var/se3/unattended/install/linuxaux/opt/perl/lib/5.10.0/Tie/ -> Scalar.pm (source)

   1  package Tie::Scalar;
   2  
   3  our $VERSION = '1.00';
   4  
   5  =head1 NAME
   6  
   7  Tie::Scalar, Tie::StdScalar - base class definitions for tied scalars
   8  
   9  =head1 SYNOPSIS
  10  
  11      package NewScalar;
  12      require Tie::Scalar;
  13  
  14      @ISA = qw(Tie::Scalar);
  15  
  16      sub FETCH { ... }        # Provide a needed method
  17      sub TIESCALAR { ... }    # Overrides inherited method
  18  
  19  
  20      package NewStdScalar;
  21      require Tie::Scalar;
  22  
  23      @ISA = qw(Tie::StdScalar);
  24  
  25      # All methods provided by default, so define only what needs be overridden
  26      sub FETCH { ... }
  27  
  28  
  29      package main;
  30  
  31      tie $new_scalar, 'NewScalar';
  32      tie $new_std_scalar, 'NewStdScalar';
  33  
  34  =head1 DESCRIPTION
  35  
  36  This module provides some skeletal methods for scalar-tying classes. See
  37  L<perltie> for a list of the functions required in tying a scalar to a
  38  package. The basic B<Tie::Scalar> package provides a C<new> method, as well
  39  as methods C<TIESCALAR>, C<FETCH> and C<STORE>. The B<Tie::StdScalar>
  40  package provides all the methods specified in  L<perltie>. It inherits from
  41  B<Tie::Scalar> and causes scalars tied to it to behave exactly like the
  42  built-in scalars, allowing for selective overloading of methods. The C<new>
  43  method is provided as a means of grandfathering, for classes that forget to
  44  provide their own C<TIESCALAR> method.
  45  
  46  For developers wishing to write their own tied-scalar classes, the methods
  47  are summarized below. The L<perltie> section not only documents these, but
  48  has sample code as well:
  49  
  50  =over 4
  51  
  52  =item TIESCALAR classname, LIST
  53  
  54  The method invoked by the command C<tie $scalar, classname>. Associates a new
  55  scalar instance with the specified class. C<LIST> would represent additional
  56  arguments (along the lines of L<AnyDBM_File> and compatriots) needed to
  57  complete the association.
  58  
  59  =item FETCH this
  60  
  61  Retrieve the value of the tied scalar referenced by I<this>.
  62  
  63  =item STORE this, value
  64  
  65  Store data I<value> in the tied scalar referenced by I<this>.
  66  
  67  =item DESTROY this
  68  
  69  Free the storage associated with the tied scalar referenced by I<this>.
  70  This is rarely needed, as Perl manages its memory quite well. But the
  71  option exists, should a class wish to perform specific actions upon the
  72  destruction of an instance.
  73  
  74  =back
  75  
  76  =head1 MORE INFORMATION
  77  
  78  The L<perltie> section uses a good example of tying scalars by associating
  79  process IDs with priority.
  80  
  81  =cut
  82  
  83  use Carp;
  84  use warnings::register;
  85  
  86  sub new {
  87      my $pkg = shift;
  88      $pkg->TIESCALAR(@_);
  89  }
  90  
  91  # "Grandfather" the new, a la Tie::Hash
  92  
  93  sub TIESCALAR {
  94      my $pkg = shift;
  95      if ($pkg->can('new') and $pkg ne __PACKAGE__) {
  96      warnings::warnif("WARNING: calling $pkg}->new since $pkg}->TIESCALAR is missing");
  97      $pkg->new(@_);
  98      }
  99      else {
 100      croak "$pkg doesn't define a TIESCALAR method";
 101      }
 102  }
 103  
 104  sub FETCH {
 105      my $pkg = ref $_[0];
 106      croak "$pkg doesn't define a FETCH method";
 107  }
 108  
 109  sub STORE {
 110      my $pkg = ref $_[0];
 111      croak "$pkg doesn't define a STORE method";
 112  }
 113  
 114  #
 115  # The Tie::StdScalar package provides scalars that behave exactly like
 116  # Perl's built-in scalars. Good base to inherit from, if you're only going to
 117  # tweak a small bit.
 118  #
 119  package Tie::StdScalar;
 120  @ISA = qw(Tie::Scalar);
 121  
 122  sub TIESCALAR {
 123      my $class = shift;
 124      my $instance = shift || undef;
 125      return bless \$instance => $class;
 126  }
 127  
 128  sub FETCH {
 129      return ${$_[0]};
 130  }
 131  
 132  sub STORE {
 133      ${$_[0]} = $_[1];
 134  }
 135  
 136  sub DESTROY {
 137      undef ${$_[0]};
 138  }
 139  
 140  1;


Generated: Tue Mar 17 22:47:18 2015 Cross-referenced by PHPXref 0.7.1