Create context-senstive return values
Usually, when you need to create a subroutine that returns different values
in different contexts (list, scalar, or void), you write something like:
    sub get_server_status {
        my ($server_ID) = @_;
        # Acquire server data somehow...
        my %server_data = _ascertain_server_status($server_ID);
        # Return different components of that data,
        # depending on call context...
        if (wantarray()) {
            return @server_data{ qw(name uptime load users) };
        }
        if (defined wantarray()) {
            return $server_data{load};
        }
        if (!defined wantarray()) {
            carp 'Useless use of get_server_status() in void context';
            return;
        }
        else {
            croak q{Bad context! No biscuit!};
        }
    }
That works okay, but the code could certainly be more readable. In its
simplest usage, this module makes that code more readable by providing
three subroutines--'LIST()', 'SCALAR()', 'VOID()'--that are true only when
the current subroutine is called in the corresponding context:
use Contextual::Return;
    sub get_server_status {
        my ($server_ID) = @_;
        # Acquire server data somehow...
        my %server_data = _ascertain_server_status($server_ID);
        # Return different components of that data
        # depending on call context...
        if (LIST)   { return @server_data{ qw(name uptime load users) } }
        if (SCALAR) { return $server_data{load}                         }
        if (VOID)   { print "$server_data{load}\n"                      }
        else        { croak q{Bad context! No biscuit!}                 }
    }
- Download package
- 
Checkout Package
osc -A https://api.opensuse.org checkout openSUSE:Backports:SLE-15-SP5/perl-Contextual-Return && cd $_
- Create Badge
Source Files
| Filename | Size | Changed | 
|---|---|---|
| Contextual-Return-0.004014.tar.gz | 0000041028 40.1 KB | |
| cpanspec.yml | 0000000547 547 Bytes | |
| perl-Contextual-Return.changes | 0000004926 4.81 KB | |
| perl-Contextual-Return.spec | 0000003421 3.34 KB | 





Comments 0