NAME

    Sub::Called - get information about how the subroutine is called

VERSION

    version 0.06

SYNOPSIS

        use Sub::Called;
        
        sub test {
            if( Sub::Called::with_ampersand() ){
                print "you called this subroutine this way: &test\n",
                      "note that this disables prototypes!\n";
            }
        }
    
    
        use Sub::Called 'already_called', 'not_called';
        
        sub user {
            unless (already_called) {   # only gets called once
                My::Fixtures::Users->load;
            }
            ...
        }
        
        sub schema {
            if ( not_called ) {
                # setup schema
            }
            else {
                return $schema;
            }
        }

EXPORTS

    There are no subroutines exported by default, but you can export all
    subroutines explicitly

      use Sub::Called qw(with_ampersand already_called not_called);

 already_called

    This function must be called from inside a subroutine. It will return
    false if the subroutine has not yet been called. It will only return
    false once.

    This subroutine is only exported on demand.

 not_called

    This function must be called from inside a subroutine. It returns the
    opposite value of already_called. Aside from this, there is no
    difference. You may find aesthetically more pleasing.

    This subroutine is only exported on demand.

 with_ampersand

    This function must be called from inside a subroutine. It returns 1 if
    the subroutine was called with an ampersand (e.g. &subroutine()).

    This subroutine is only exported on demand.

FUNCTIONS

 with_ampersand

 already_called

 not_called

LIMITATIONS / TODO

    There are limitations and I don't know if I can solve these "problems".
    So this section is also named "TODO". If you know a solution for any of
    these limitations, please let me know.

 Subroutine References

    It seems that there are some problems with subroutine references.

    This may not work:

      sub test2 {
          if( Sub::Called::with_ampersand() ){
              die "die hard";
          }
      };
        
      my $sub2 = main->can( 'test2' );
      &$sub2();

 Inside a module

    If you call subroutines in a module but outside any subroutine (so the
    subroutine calls are executed when the module is loaded), I cannot give
    a correct answer ;-)

      package Check;
      
      use strict;
      use warnings;
      use Sub::Called qw(with_ampersand);
      
      &test;
      
      sub test {
          if( with_ampersand() ){
              print "yada yada yada\n";
          }
      }

CONTRIBUTORS

    Renee Baecker, <module at renee-baecker.de>

    Curtis "Ovid" Poe, <ovid at cpan.org>

ISSUE TRACKER & CODE REPOSITORY

    An issue tracker and the code repository are available at
    http://github.com/reneeb/Sub-Called.

AUTHOR

    Renee Baecker <reneeb@cpan.org>

COPYRIGHT AND LICENSE

    This software is Copyright (c) 2008 by Renee Baecker.

    This is free software, licensed under:

      The Artistic License 2.0 (GPL Compatible)