=cut
my $_term_width;
+my $_use_term_size_any;
sub term_width {
my $force_reset = shift;
return $_term_width if $_term_width;
+ if ($ENV{COLUMNS} && $ENV{COLUMNS} =~ /\A\d+\z/) {
+ return $_term_width = $ENV{COLUMNS};
+ }
+
+ if (!-t STDOUT && !-t STDERR) {
+ return $_term_width = 80;
+ }
+
+ if (!defined $_use_term_size_any) {
+ eval {
+ require Term::Size::Any;
+ Term::Size::Any->import();
+ $_use_term_size_any = 1;
+ 1;
+ } or do {
+ if ( $@ =~ m[Can't locate Term/Size/Any\.pm] ) {
+ warn "Term::Size::Any is not installed, can't autodetect terminal column width\n";
+ }
+ else {
+ warn "There was an error trying to detect your terminal size: $@\n";
+ }
+ $_use_term_size_any = 0;
+ };
+ }
+
my $width;
- eval '
- use Term::Size::Any;
- ($width) = Term::Size::Any::chars;
- 1;
- ' or do {
- if($@ =~m[Can't locate Term/Size/Any.pm]) {
- warn "Term::Size::Any is not installed, can't autodetect terminal column width\n";
- } else {
- warn "There was an error trying to detect your terminal size: $@\n";
- }
- };
- unless ($width) {
- warn 'Trouble trying to detect your terminal size, looking at $ENV{COLUMNS}'."\n";
- $width = $ENV{COLUMNS}
- if exists($ENV{COLUMNS})
- && $ENV{COLUMNS} =~ m/^\d+$/;
+ if ($_use_term_size_any) {
+ $width = Term::Size::Any::chars(*STDERR) || Term::Size::Any::chars(*STDOUT);
+ }
+
+ if (!$width || $width < 80) {
+ $width = 80;
}
- do {
- warn "Cannot determine desired terminal width, using default of 80 columns\n";
- $width = 80 } unless ($width && $width >= 80);
return $_term_width = $width;
}
croak "Unable to build component package for \"$component_package\": $@";
Moose::Util::apply_all_roles($component_package, @{$given{traits}}) if $given{traits};
(my $file = "$component_package.pm") =~ s{::}{/}g;
- $INC{$file} ||= 1;
+ $INC{$file} ||= 1;
}
my $_setup_component = sub {