ARGV-OrDATA

 view release on metacpan or  search on metacpan

lib/ARGV/OrDATA.pm  view on Meta::CPAN

ARGV::OrDATA - Let the diamond operator read from DATA if there's no ARGV

=head1 VERSION

Version 0.005

=cut

our $VERSION = '0.005';

sub import {
    my ($package) = $_[1] || caller;
    {   no strict 'refs';
        no warnings 'once';
        *ORIG = *ARGV;
        *ARGV = *{$package . '::DATA'} unless @ARGV || ! -t;
    }
}


sub unimport {
    my $package = shift;
    *ARGV = *ORIG;
    {   no strict 'refs';
        delete ${$package . '::'}{ORIG};
    }
    undef *ORIG;
}


sub is_using_argv {
    ! is_using_data()
}


sub is_using_data {
    my ($package) = caller;
    $package = caller 1 if 'ARGV::OrDATA' eq $package;
    return do {
        no strict 'refs';
        *ARGV eq *{$package . '::DATA' }
    }
}


=head1 SYNOPSIS

t/05-is_funcs.t  view on Meta::CPAN

#!/usr/bin/perl
use warnings;
use strict;

use FindBin;
use Test::More tests => 4;

my %SCRIPT = (0 => 'is_using.pl',
              1 => 'is_using_package.pl');
sub run {
    my ($argument, $package, $expected) = @_;
    my $PIPE;
    if ('MSWin32' eq $^O && $] < 5.022) {
        open $PIPE, '-|',
                "$^X $FindBin::Bin/$SCRIPT{$package}"
                . ($argument ? "$FindBin::Bin/input.txt" : "")
            or die $!;
    } else {
        open $PIPE, '-|', $^X, "$FindBin::Bin/$SCRIPT{$package}",
                               $argument ? "$FindBin::Bin/input.txt" : ()

t/My.pm  view on Meta::CPAN

package
    My;

use warnings;
use strict;

sub imported { 1 }

__PACKAGE__

__DATA__
package 1
package 2



( run in 0.336 second using v1.01-cache-2.11-cpan-4d50c553e7e )