Hello community,
here is the log from the commit of package perl-IO-Pager for openSUSE:Factory checked in at 2019-09-09 12:36:25
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-IO-Pager (Old)
and /work/SRC/openSUSE:Factory/.perl-IO-Pager.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "perl-IO-Pager"
Mon Sep 9 12:36:25 2019 rev:24 rq:729256 version:0.42
Changes:
--------
--- /work/SRC/openSUSE:Factory/perl-IO-Pager/perl-IO-Pager.changes 2018-11-12 09:41:12.337207847 +0100
+++ /work/SRC/openSUSE:Factory/.perl-IO-Pager.new.7948/perl-IO-Pager.changes 2019-09-09 12:36:29.933461385 +0200
@@ -1,0 +2,17 @@
+Fri Sep 6 08:10:18 UTC 2019 -
+
+- updated to 0.42
+ see /usr/share/doc/packages/perl-IO-Pager/CHANGES
+
+ 0.42 Thu Sep 05 2019
+ Disambiguate tee open. RT#127551
+
+ Stringify version. RT#127342
+
+ Add bignum dependency RT#130319
+
+ Add support for eventual Term::Pager v1.5
+
+ Update META files.
+
+-------------------------------------------------------------------
Old:
----
IO-Pager-0.40.tgz
New:
----
IO-Pager-0.42.tgz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ perl-IO-Pager.spec ++++++
--- /var/tmp/diff_new_pack.yzz1cA/_old 2019-09-09 12:36:30.469461297 +0200
+++ /var/tmp/diff_new_pack.yzz1cA/_new 2019-09-09 12:36:30.473461297 +0200
@@ -1,7 +1,7 @@
#
# spec file for package perl-IO-Pager
#
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -17,11 +17,11 @@
Name: perl-IO-Pager
-Version: 0.40
+Version: 0.42
Release: 0
%define cpan_name IO-Pager
Summary: Select a pager and pipe text to it if destination is a TTY
-License: GPL-1.0-or-later OR Artistic-1.0
+License: Artistic-1.0 OR GPL-1.0-or-later
Group: Development/Libraries/Perl
Url: https://metacpan.org/release/%{cpan_name}
Source0: https://cpan.metacpan.org/authors/id/J/JP/JPIERCE/%{cpan_name}-%{version}.tgz
@@ -47,7 +47,7 @@
appropriate subclass for implementation specific details.
%prep
-%setup -q -n %{cpan_name}-0.4
+%setup -q -n %{cpan_name}-%{version}
%build
perl Makefile.PL INSTALLDIRS=vendor
++++++ IO-Pager-0.40.tgz -> IO-Pager-0.42.tgz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/.travis.yml new/IO-Pager-0.42/.travis.yml
--- old/IO-Pager-0.4/.travis.yml 2015-12-27 19:59:24.000000000 +0100
+++ new/IO-Pager-0.42/.travis.yml 1970-01-01 01:00:00.000000000 +0100
@@ -1,11 +0,0 @@
-sudo: false
-language: perl
-perl:
-- "5.22"
-- "5.20"
-- "5.18"
-- "5.16"
-- "5.14"
-- "5.12"
-- "5.10"
-- "5.8"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/CHANGES new/IO-Pager-0.42/CHANGES
--- old/IO-Pager-0.4/CHANGES 2018-10-11 04:49:52.000000000 +0200
+++ new/IO-Pager-0.42/CHANGES 2019-09-06 02:20:52.000000000 +0200
@@ -1,5 +1,16 @@
Revision history for Perl extension IO::Pager.
+0.42 Thu Sep 05 2019
+ Disambiguate tee open. RT#127551
+
+ Stringify version. RT#127342
+
+ Add bignum dependency RT#130319
+
+ Add support for eventual Term::Pager v1.5
+
+ Update META files.
+
0.40 Mon Oct 08 2018
And a tee(1)-like feature via binmode().
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/MANIFEST new/IO-Pager-0.42/MANIFEST
--- old/IO-Pager-0.4/MANIFEST 2018-10-08 21:49:45.000000000 +0200
+++ new/IO-Pager-0.42/MANIFEST 2019-09-06 02:21:26.000000000 +0200
@@ -4,12 +4,12 @@
lib/IO/Pager.pm
lib/IO/Pager/Buffered.pm
lib/IO/Pager/Page.pm
+lib/IO/Pager/Perl.pm
lib/IO/Pager/Unbuffered.pm
README
TODO
.proverc
-.travis.yml
-t.pl
+test.pl
t/01-load.t
t/02-which.t
t/02-which_interactive.t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/META.json new/IO-Pager-0.42/META.json
--- old/IO-Pager-0.4/META.json 2018-10-11 04:49:57.000000000 +0200
+++ new/IO-Pager-0.42/META.json 2019-09-06 02:22:00.000000000 +0200
@@ -26,7 +26,8 @@
"Env" : "0",
"Exporter" : "0",
"File::Temp" : "0",
- "Test::More" : "0.88"
+ "Test::More" : "0.88",
+ "bignum" : "0"
}
},
"configure" : {
@@ -49,6 +50,12 @@
}
},
"release_status" : "stable",
- "version" : 0.4,
+ "version" : "0.42",
+ "x_runtime" : {
+ "recommends" : {
+ "Term::Pager" : 1.5,
+ "Term::ReadKey" : 0
+ }
+ },
"x_serialization_backend" : "JSON::PP version 2.97001"
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/META.yml new/IO-Pager-0.42/META.yml
--- old/IO-Pager-0.4/META.yml 2018-10-11 04:49:56.000000000 +0200
+++ new/IO-Pager-0.42/META.yml 2019-09-06 02:22:00.000000000 +0200
@@ -8,6 +8,7 @@
Exporter: '0'
File::Temp: '0'
Test::More: '0.88'
+ bignum: '0'
configure_requires:
ExtUtils::MakeMaker: '0'
dynamic_config: 1
@@ -31,5 +32,9 @@
Symbol: '0'
Tie::Handle: '0'
base: '0'
-version: 0.4
+version: '0.42'
+x_runtime:
+ recommends:
+ Term::Pager: 1.5
+ Term::ReadKey: 0
x_serialization_backend: 'CPAN::Meta::YAML version 0.018'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/Makefile.PL new/IO-Pager-0.42/Makefile.PL
--- old/IO-Pager-0.4/Makefile.PL 2016-03-01 04:23:21.000000000 +0100
+++ new/IO-Pager-0.42/Makefile.PL 2019-09-06 02:18:47.000000000 +0200
@@ -10,6 +10,7 @@
'Env' => 0,
'Exporter' => 0,
'File::Temp' => 0,
+ 'bignum' => 0,
},
'PREREQ_PM' => {
'base' => 0,
@@ -22,6 +23,15 @@
'Symbol' => 0,
'Tie::Handle' => 0,
},
+ META_MERGE => {
+ "meta-spec" => { version => 2 },
+ runtime => {
+ recommends => {
+ 'Term::Pager' => 1.5,
+ 'Term::ReadKey' => 0,
+ },
+ },
+ },
($] >= 5.005 ? # Add these new keywords supported since 5.005
(
ABSTRACT_FROM => 'lib/IO/Pager.pm', # retrieve abstract from module
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/TODO new/IO-Pager-0.42/TODO
--- old/IO-Pager-0.4/TODO 2018-10-10 05:35:13.000000000 +0200
+++ new/IO-Pager-0.42/TODO 2018-10-17 02:21:58.000000000 +0200
@@ -1,11 +1,22 @@
Important things here and in code flagged with XXX
0.40
- Verify all sample code works, esp. STDOUT
+ Push previous versions to github
- Fix STDOUT?! Need tied_fh (store as dumped field for later eval?)
- Dupiness?
+ Functional fork for Term::Pager
+ working interface
+ continue after quit
+ extensibility (add_func)
+ Test functionality w/|w/o Term::ReadKey
+ As expicit and implicit PAGER
+
+ make pipes
+ make pager object
+ parent
+ event loop/interfact
+ child
+ worker
0.35
Odd failure of test 11 under tcsh and win-bash because
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/lib/IO/Pager/Buffered.pm new/IO-Pager-0.42/lib/IO/Pager/Buffered.pm
--- old/IO-Pager-0.4/lib/IO/Pager/Buffered.pm 2018-10-11 04:44:45.000000000 +0200
+++ new/IO-Pager-0.42/lib/IO/Pager/Buffered.pm 2018-10-13 18:31:49.000000000 +0200
@@ -1,5 +1,5 @@
package IO::Pager::Buffered;
-our $VERSION = 0.40;
+our $VERSION = 0.42;
use strict;
use base qw( IO::Pager );
@@ -91,14 +91,14 @@
{
# You can also use scalar filehandles...
my $token = IO::Pager::Buffered::open($FH) or warn($!);
- print $FH "No globs or barewords for us thanks!\n";
+ print $FH "No globs or barewords for us thanks!\n" while 1;
}
{
# ...or an object interface
my $token = new IO::Pager::Buffered;
- $token->print("OO shiny...\n");
+ $token->print("OO shiny...\n") while 1;
}
=head1 DESCRIPTION
@@ -162,6 +162,19 @@
I<$,> is used see L<perlvar>.
+You probably want to do something with SIGPIPE eg;
+
+ eval {
+ local $SIG{PIPE} = sub { die };
+ local $STDOUT = IO::Pager::open(*STDOUT);
+
+ while (1) {
+ # Do something
+ }
+ }
+
+ # Do something else
+
=head1 SEE ALSO
LIO::Pager, LIO::Pager::Unbuffered, LIO::Pager::Page,
@@ -176,7 +189,7 @@
=head1 COPYRIGHT AND LICENSE
-Copyright (C) 2003-2012 Jerrad Pierce
+Copyright (C) 2003-2018 Jerrad Pierce
=over
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/lib/IO/Pager/Perl.pm new/IO-Pager-0.42/lib/IO/Pager/Perl.pm
--- old/IO-Pager-0.4/lib/IO/Pager/Perl.pm 1970-01-01 01:00:00.000000000 +0100
+++ new/IO-Pager-0.42/lib/IO/Pager/Perl.pm 2018-10-18 06:02:56.000000000 +0200
@@ -0,0 +1,207 @@
+package IO::Pager::Perl;
+our $VERSION = 0.42;
+
+use strict;
+use base qw( IO::Pager );
+use SelectSaver;
+use Term::Pager 1.5;
+
+our %CFG;
+
+sub new(;$) { # [FH], procedural
+ my($class, $tied_fh);
+
+ eval { ($class, $tied_fh) = &IO::Pager::_init };
+ #We're not on a TTY so...
+ if( defined($class) && $class eq '0' or $@ =~ '!TTY' ){
+ #...leave filehandle alone if procedural
+ return $_[1] if defined($_[2]) && $_[2] eq 'procedural';
+
+ #...fall back to IO::Handle for transparent OO programming
+ eval "require IO::Handle" or die $@;
+ return IO::Handle->new_from_fd(fileno($_[1]), 'w');
+ }
+ $!=$@, return 0 if $@ =~ 'pipe';
+
+ my $self = tie *$tied_fh, $class, $tied_fh or return 0;
+ use Data::Dumper; print Dumper 'TIED: ', $$, $self;
+ CORE::print {$self->{real_fh}} "BOO!";
+ { # Truly unbuffered
+ my $saver = SelectSaver->new($self->{real_fh});
+ $|=1;
+ }
+ return $self;
+}
+
+#Punt to base, preserving FH ($_[0]) for pass by reference to gensym
+sub open(;$) { # [FH]
+ &new('IO::Pager::procedural', $_[0], 'procedural');
+}
+
+sub PRINT {
+ my ($self, @args) = @_;
+ CORE::print {$self->{LOG}} @args if exists($self->{LOG});
+ CORE::syswrite({$self->{real_fh}},
+ join('', @args) ) or die "Could not print to PAGER: $!\n";
+}
+
+sub _pipe_to_fork ($) {
+ pipe(my $READ, my $WRITE=shift) or die;
+ { # Unbuffer!
+ my $saver = SelectSaver->new($WRITE);
+ $|=1;
+ }
+ warn "$READ $WRITE"; #XXX
+ my $pid = fork();
+ die "fork() failed: $!" unless defined $pid;
+
+ #Parent is reader to maintain STDIN/STDOUT
+ if( $pid ){
+ warn "Parent: $$, Child: $pid";
+ close $WRITE;
+ my $tmp;
+ sysread($READ, $tmp, 1024);
+ warn 'WTF? ', $tmp;
+ open(STDIN, "<&=" . fileno($READ)) or die $!; }
+ else{
+ syswrite($WRITE, "MUAHAHAHA\n"); #XXX
+ close $READ; }
+ $pid;
+}
+
+sub TIEHANDLE {
+ my ($class, $tied_fh) = @_;
+ my($real_fh, $child);
+
+ #Parent is interface, child does work
+ if( $child = _pipe_to_fork( $real_fh=Symbol::gensym() ) ){
+ my $t = Term::Pager->new();
+
+ #Customize interfaces
+ foreach my $key ( keys(%CFG) ){
+ $t->add_func($key, $CFG{$key}) if $key;
+ }
+
+ while( eval{ $t->more(RT=>.05) } ){
+ my $tmp;
+ $t->add_text($tmp) if sysread($real_fh, $tmp, 1024);
+ }
+ #XXX exit or die?! SIGPIPE?!
+ }
+ else{
+ my $X = bless {
+ 'real_fh' => $real_fh,
+ 'tied_fh' => "$tied_fh", #Avoid self-reference leak
+ 'child' => $child, #XXX Actually, we want the parent?!
+ 'pager' => 'Term::Pager',
+ }, $class;
+ use Data::Dumper; warn Dumper ['BLESSED: ', $$, $X];
+ return $X;
+ }
+}
+
+1;
+
+__END__
+
+=pod
+
+=head1 NAME
+
+IO::Pager::Perl - Pipe output to PAGER if destination is a TTY with Perl
+
+=head1 SYNOPSIS
+
+ #Required if you want unbuffered output
+ use Term::ReadKey;
+
+ {
+ #Configure extra shortcuts, add an embedded shell
+ %IO::Pager::Perl::CFG = ( '!' => sub{ "REPL implementation" } );
+
+ #Can be instantiated functionally or OO, same as other sub-classes.
+ my $token = new IO::Pager::Perl;
+
+ $token->print("Pure perl goodness...\n") while 1;
+ }
+
+=head1 DESCRIPTION
+
+IO::Pager::Perl is a simple, extensible, perl-based pager.
+
+If you want behavior similar to IO::Pager::Buffer do not load Term::ReadKey,
+and output will be buffered between keypresses.
+
+See LIO::Pager for method details.
+
+=head1 CONFIGURATION
+
+I<%IO::Pager::Perl::CFG> elements are passed to Term::Pager's add_func method.
+The hash keys are single key shortcut definitions, and values a callback to be
+invoked when said key is pressed e.g;
+
+ #Forego default left-right scrolling for more less-like seeking
+ %IO::Pager::Perl::CFG = (
+ '<' => \&Term::Pager::to_top, #not move_left
+ '>' => \&Term::Pager::to_bottom #not move_right
+ );
+
+Because IO::Pager::Perl forks, the callback functions must exist prior to
+instantiation of the IO::Pager object to work properly.
+
+=head1 METHODS
+
+All methods are inherited from IO::Pager; except for instantiation and print.
+
+=head1 CAVEATS
+
+You probably want to do something with SIGPIPE eg;
+
+ eval {
+ local $SIG{PIPE} = sub { die };
+ local $STDOUT = IO::Pager::open(*STDOUT);
+
+ while (1) {
+ # Do something
+ }
+ }
+
+ # Do something else
+
+=head1 SEE ALSO
+
+LIO::Pager, LTerm::Pager, LIO::Pager::Buffered, LIO::Pager::Page,
+
+=head1 AUTHOR
+
+Jerrad Pierce
+
+Florent Angly
+
+This module was inspired by Monte Mitzelfelt's IO::Page 0.02
+
+Significant proddage provided by Tye McQueen.
+
+=head1 COPYRIGHT AND LICENSE
+
+Copyright (C) 2003-2018 Jerrad Pierce
+
+=over
+
+=item * Thou shalt not claim ownership of unmodified materials.
+
+=item * Thou shalt not claim whole ownership of modified materials.
+
+=item * Thou shalt grant the indemnity of the provider of materials.
+
+=item * Thou shalt use and dispense freely without other restrictions.
+
+=back
+
+Or, if you prefer:
+
+This library is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself, either Perl version 5.0 or,
+at your option, any later version of Perl 5 you may have available.
+
+=cut
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/lib/IO/Pager/Unbuffered.pm new/IO-Pager-0.42/lib/IO/Pager/Unbuffered.pm
--- old/IO-Pager-0.4/lib/IO/Pager/Unbuffered.pm 2018-10-11 04:44:36.000000000 +0200
+++ new/IO-Pager-0.42/lib/IO/Pager/Unbuffered.pm 2018-10-13 19:29:53.000000000 +0200
@@ -1,5 +1,5 @@
package IO::Pager::Unbuffered;
-our $VERSION = 0.31;
+our $VERSION = 0.42;
use strict;
use base qw( IO::Pager );
@@ -60,14 +60,14 @@
{
# You can also use scalar filehandles...
my $token = IO::Pager::Unbuffered::open($FH) or warn($!);
- print $FH "No globs or barewords for us thanks!\n";
+ print $FH "No globs or barewords for us thanks!\n" while 1;
}
{
# ...or an object interface
my $token = new IO::Pager::Unbuffered;
- $token->print("OO shiny...\n");
+ $token->print("OO shiny...\n") while 1;
}
=head1 DESCRIPTION
@@ -87,7 +87,7 @@
You probably want to do something with SIGPIPE eg;
eval {
- $SIG{PIPE} = sub { die };
+ local $SIG{PIPE} = sub { die };
local $STDOUT = IO::Pager::open(*STDOUT);
while (1) {
@@ -113,7 +113,7 @@
=head1 COPYRIGHT AND LICENSE
-Copyright (C) 2003-2012 Jerrad Pierce
+Copyright (C) 2003-2018 Jerrad Pierce
=over
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/lib/IO/Pager.pm new/IO-Pager-0.42/lib/IO/Pager.pm
--- old/IO-Pager-0.4/lib/IO/Pager.pm 2018-10-11 04:44:11.000000000 +0200
+++ new/IO-Pager-0.42/lib/IO/Pager.pm 2018-11-03 03:20:48.000000000 +0100
@@ -1,5 +1,5 @@
package IO::Pager;
-our $VERSION = 0.40; #Untouched since 0.40
+our $VERSION = "0.42"; #Untouched since 0.42
use 5.008; #At least, for decent perlio, and other modernisms
use strict;
@@ -17,6 +17,9 @@
# Return the name (or path) of a pager that IO::Pager can use
my $io_pager;
+ #Permit explicit use of pure perl pager
+ return $_[0] if $_[0] eq 'Term::Pager';
+
# Use File::Which if available (strongly recommended)
my $which = eval { require File::Which };
@@ -73,6 +76,12 @@
#Should have this as first block for clarity, but not with its use of a sub :-/
BEGIN { # Set the $ENV{PAGER} to something reasonable
$PAGER = find_pager();
+
+ #Do we have modern Term::Pager? If so, use it instead of hopeful more
+ if( $PAGER eq 'more' ){
+ eval "use Term::Pager";
+ $PAGER = 'Term::Pager' unless $@;
+ }
}
@@ -177,7 +186,7 @@
sub BINMODE {
my ($self, $layer) = @_;
if( $layer =~ /^:LOG\((>{0,2})(.*)\)$/ ){
- open($self->{LOG}, $1||'>', $2||"$$.log") or die $!;
+ CORE::open($self->{LOG}, $1||'>', $2||"$$.log") or die $!;
}
else{
CORE::binmode($self->{real_fh}, $layer||':raw');
@@ -291,7 +300,7 @@
my $object = new IO::Pager::Unbuffered *STDOUT;
- $object->print("OO shiny...\n");
+ $object->print("OO shiny...\n") while 1;
print "Some other text sent to STODUT, perhaps from a foreign routine."
# $object passes out of scope and filehandle is automagically closed
@@ -320,7 +329,7 @@
{
# You can also use scalar filehandles...
my $token = IO::Pager::open(my $FH) or warn($!); XXX
- print $FH "No globs or barewords for us thanks!\n";
+ print $FH "No globs or barewords for us thanks!\n" while 1;
}
@@ -527,19 +536,39 @@
If File::Which is available, use the first pager possible amongst
C<less>, C<most>, C<w3m>, C<lv>, C<pg> and L<more>.
-=item 4. more
+=item 4. Term::Pager
+
+If instantiating an IO::Pager object and Term::Pager version 1.5 or greater is
+available, LIO::Pager::Perl will be used. You may also set $ENV{PAGER} to
+Term::Pager to select this extensible, pure perl pager for display.
+
+=item 5. more
Set I<PAGER> to C<more>, and cross our fingers.
=back
-Steps 1, 3 and 4 rely upon the I<PATH> environment variable.
+Steps 1, 3 and 5 rely upon the I<PATH> environment variable.
-=head1 SEE ALSO
+=head1 CAVEATS
+
+You probably want to do something with SIGPIPE eg;
-LIO::Pager::Buffered, LIO::Pager::Unbuffered, LIO::Pager::Page,
+ eval {
+ local $SIG{PIPE} = sub { die };
+ local $STDOUT = IO::Pager::open(*STDOUT);
+
+ while (1) {
+ # Do something
+ }
+ }
+
+ # Do something else
+
+=head1 SEE ALSO
-LIO::Page, LMeta::Tool::Less
+LIO::Pager::Buffered, LIO::Pager::Unbuffered, L,
+LIO::Pager::Page, LIO::Page, LMeta::Tool::Less
=head1 AUTHOR
@@ -551,7 +580,7 @@
=head1 COPYRIGHT AND LICENSE
-Copyright (C) 2003-2015 Jerrad Pierce
+Copyright (C) 2003-2018 Jerrad Pierce
=over
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/IO-Pager-0.4/test.pl new/IO-Pager-0.42/test.pl
--- old/IO-Pager-0.4/test.pl 1970-01-01 01:00:00.000000000 +0100
+++ new/IO-Pager-0.42/test.pl 2017-05-13 18:41:19.000000000 +0200
@@ -0,0 +1,13 @@
+use strict;
+use warnings;
+
+exit 0 unless scalar(@ARGV) && ($ARGV[0] eq 'interactive');
+
+undef($ENV{LESS});
+
+my @fail;
+for (sort glob "t/*interactive.t") {
+ print "Running $_...\n";
+ push @fail, $_ if system($^X, '-Mblib', $_);
+}
+print scalar @fail ? "\nSome tests failed: @fail\n" : "\nSuccess!\n";