r3741 - in /packages/libend-perl: ./ branches/ branches/upstream/ branches/upstream/current/ branches/upstream/current/End.pm branches/upstream/current/MANIFEST branches/upstream/current/Makefile.PL branches/upstream/current/test.pl tags/

gwolf at users.alioth.debian.org gwolf at users.alioth.debian.org
Thu Sep 14 17:34:47 UTC 2006


Author: gwolf
Date: Thu Sep 14 17:34:39 2006
New Revision: 3741

URL: http://svn.debian.org/wsvn/pkg-perl/?sc=1&rev=3741
Log:
[svn-inject] Installing original source of libend-perl

Added:
    packages/libend-perl/
    packages/libend-perl/branches/
    packages/libend-perl/branches/upstream/
    packages/libend-perl/branches/upstream/current/
    packages/libend-perl/branches/upstream/current/End.pm
    packages/libend-perl/branches/upstream/current/MANIFEST
    packages/libend-perl/branches/upstream/current/Makefile.PL
    packages/libend-perl/branches/upstream/current/test.pl
    packages/libend-perl/tags/

Added: packages/libend-perl/branches/upstream/current/End.pm
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libend-perl/branches/upstream/current/End.pm?rev=3741&op=file
==============================================================================
--- packages/libend-perl/branches/upstream/current/End.pm (added)
+++ packages/libend-perl/branches/upstream/current/End.pm Thu Sep 14 17:34:39 2006
@@ -1,0 +1,120 @@
+package End;
+
+#
+# $Id: End.pm,v 1.2 2000/05/31 20:25:33 abigail Exp $
+#
+# $Log: End.pm,v $
+# Revision 1.2  2000/05/31 20:25:33  abigail
+# Added the license paragraph in the POD section.
+#
+# Revision 1.1  2000/05/31 19:35:01  abigail
+# Initial revision
+#
+
+use strict;
+
+use Exporter;
+use vars qw /@EXPORT @ISA $VERSION/;
+
+ at ISA    = qw /Exporter/;
+ at EXPORT = qw /end/;
+
+($VERSION) = '$Revision: 1.2 $' =~ /([\d.]+)/;
+
+sub end (&) {
+    my    $code =  shift;
+    # Due to a bug in Perl 5.6.0, we can't just bless $code.
+    # But by creating an extra closure, it'll work.
+    bless sub {$code -> ()} => __PACKAGE__;
+}
+
+DESTROY {$_ [0] -> ()}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME 
+
+End - generalized END {}.
+
+=head1 SYNOPSIS
+
+    use End;
+
+    {  my $foo = end {print "Leaving the block\n"};
+       ...
+       last;    # prints "Leaving the block\n".
+       ...
+    }
+
+
+=head1 DESCRIPTION
+
+The module C<End> exports a single subroutine C<end>, which allows
+you to set up some code that is run whenever the current block is exited,
+regardless whether that is due to a C<return>, C<next>, C<last>, C<redo>,
+C<exit>, C<die>, C<goto> or just reaching the end of the block.
+
+To be more precise, C<end> returns an object, that will execute the
+code when the object is destroyed; that is, when the variable assigned
+to goes out of scope. If the variable is lexical to the current block,
+the code will be executed when leaving the block. 
+
+One can force premature execution of the code by undefining the variable
+assigned to, or assigning another value to the variable. 
+
+C<end> only takes one argument, a code reference. If one wishes the code
+reference to take arguments, wrapping the code reference in a closure
+suffices.
+
+=head1 BUGS
+
+Due to a bug in Perl 5.6.0 (and perhaps before), anonymous subroutines
+that are not a closure will not go out of scope, not even on program
+termination. That is why C<end> wraps the code fragment in a closure.
+
+There is a second bug in Perl 5.6.0 (and perhaps before) why this is
+necessary. If the code fragment isn't wrapped in another code reference,
+the original subroutine will be blessed in the package, making that C<ref>
+on that code no longer returns the right value.
+
+=head1 REVISION HISTORY
+
+    $Log: End.pm,v $
+    Revision 1.2  2000/05/31 20:25:33  abigail
+    Added the license paragraph in the POD section.
+
+    Revision 1.1  2000/05/31 19:35:01  abigail
+    Initial revision
+
+
+=head1 AUTHOR
+
+This package was written by Abigail, I<abigail at delanet.com>.
+
+=head1 COPYRIGHT & LICENSE
+
+This program is copyright 2000 by Abigail.
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+THE AUTHOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT
+OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+=cut

Added: packages/libend-perl/branches/upstream/current/MANIFEST
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libend-perl/branches/upstream/current/MANIFEST?rev=3741&op=file
==============================================================================
--- packages/libend-perl/branches/upstream/current/MANIFEST (added)
+++ packages/libend-perl/branches/upstream/current/MANIFEST Thu Sep 14 17:34:39 2006
@@ -1,0 +1,4 @@
+End.pm
+MANIFEST
+Makefile.PL
+test.pl

Added: packages/libend-perl/branches/upstream/current/Makefile.PL
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libend-perl/branches/upstream/current/Makefile.PL?rev=3741&op=file
==============================================================================
--- packages/libend-perl/branches/upstream/current/Makefile.PL (added)
+++ packages/libend-perl/branches/upstream/current/Makefile.PL Thu Sep 14 17:34:39 2006
@@ -1,0 +1,8 @@
+use ExtUtils::MakeMaker;
+# See lib/ExtUtils/MakeMaker.pm for details of how to influence
+# the contents of the Makefile that is written.
+WriteMakefile(
+    'NAME'		=> 'End',
+    'VERSION_FROM'	=> 'End.pm', # finds $VERSION
+    'PREREQ_PM'		=> {}, # e.g., Module::Name => 1.1
+);

Added: packages/libend-perl/branches/upstream/current/test.pl
URL: http://svn.debian.org/wsvn/pkg-perl/packages/libend-perl/branches/upstream/current/test.pl?rev=3741&op=file
==============================================================================
--- packages/libend-perl/branches/upstream/current/test.pl (added)
+++ packages/libend-perl/branches/upstream/current/test.pl Thu Sep 14 17:34:39 2006
@@ -1,0 +1,34 @@
+# Before `make install' is performed this script should be runnable with
+# `make test'. After `make install' it should work as `perl test.pl'
+
+######################### We start with some black magic to print on failure.
+
+# Change 1..1 below to 1..last_test_to_print .
+# (It may become useful if the test is moved to ./t subdirectory.)
+
+BEGIN { $| = 1; print "1..1\n"; }
+END {print "not ok 1\n" unless $loaded;}
+use End;
+$loaded = 1;
+print "ok 1\n";
+
+######################### End of black magic.
+
+# Insert your test code below (better if it prints "ok 13"
+# (correspondingly "not ok 13") depending on the success of chunk 13
+# of the test code):
+
+my $i = 1;
+{  my $foo = end {$i ++};
+   $i += 2;
+   last;
+   $i += 2;
+}
+print $i == 4 ? "ok 2\n" : "not ok 2\n";
+
+my $sum = 0;
+foreach my $i (1 .. 9) {
+    my $foo = end {$sum += $i};
+    next;
+}
+print $sum == 45 ? "ok 3\n" : "not ok 3\n";




More information about the Pkg-perl-cvs-commits mailing list