sub try_shell { my $shell = shift; print "line 1\n"; my $out = eval { capture($shell, '-c', 'echo good') }; print "line 2\n"; if ($out and $out =~ /^good$/) { print "line 3\n"; if ($shell =~ /ksh/) { print "line 4\n"; if (defined (my $version = eval { `$shell --version 2>&1` })) { print "line 5\n"; if ($version =~ /version\s+sh\s+\(AT\&T\s+Research\)/) { diag "skipping tests for broken AT&T ksh shell!"; return undef; } } } print "line 6\n"; if ($shell eq '!!fish') { diag "TODO: add support for fish shell!"; return undef; } return 1; } return undef; } #### -bash-3.2$ sudo perl -Mblib t/quoting.t line 1 line 2 line 3 line 6 line 1 line 2 line 3 line 6 line 1 line 2 line 3 line 6 line 1 line 2 line 3 line 6 line 1 line 2 line 3 line 4 ^C #### my @shells = grep try_shell($_), qw(sh csh bash tcsh ksh dash ash pdksh mksh zsh fish);