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" : ()
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 )