##############################################################################
# $Date: 2008-07-14 09:27:25 -0500 (Mon, 14 Jul 2008) $
# $Author: clonezone $
# $Revision: 2591 $
##############################################################################
#-----------------------------------------------------------------------------
## name basic passes
## failures 0
## cut
sub foo { }
sub bar;
sub baz { return; }
sub quux { return {some => [qw(complicated data)], q{ } => /structure/}; }
#-----------------------------------------------------------------------------
## name complex passes
## failures 0
## cut
sub foo { if ($bool) { return; } else { return; } }
sub bar { unless ($bool) { return; } else { return; } }
sub baz { if ($bool) { return; } elsif ($bool2) { return; } else { return; } }
sub quuz { unless ($bool) { return; } elsif ($bool2) { return; } else { return; } }
#-----------------------------------------------------------------------------
## name ternary returns
## failures 0
## TODO We are not yet detecting ternaries
## cut
sub foo { 1 ? return : 2 ? return : return; }
#-----------------------------------------------------------------------------
## name returning ternaries
## failures 0
## cut
sub foo { return 1 ? 1 : 2 ? 2 : 3; }
#-----------------------------------------------------------------------------
## name implicit returns fail
## failures 2
## cut
sub foo { 1 }
sub foo { 'Club sandwich'; }
#-----------------------------------------------------------------------------
## name return in a constant loop
## failures 1
## cut
sub foo { while (1==1) { return; } }
#-----------------------------------------------------------------------------
## name not all code paths returns
## failures 3
## cut
sub foo { if ($bool) { } else { } }
sub foo { if ($bool) { $foo = 'bar'; } else { return; } }
sub foo { unless ($bool) { $foo = 'bar'; } else { return; } }
#-----------------------------------------------------------------------------
## name special blocks exemption
## failures 0
## cut
BEGIN {
print 'this should not need a return';
}
INIT {
print 'nor this';
}
CHECK {
print 'nor this';
}
END {
print 'nor this';
}
#-----------------------------------------------------------------------------
## name goto is equivalent to return
## failures 0
## cut
sub foo { goto &bar; }
END_PERL
#-----------------------------------------------------------------------------
## name next and last are not equivalent to return (and are invalid Perl)
## failures 2
## cut
sub foo { next; }
sub bar { last; }
#-----------------------------------------------------------------------------
## name abnormal termination is allowed
## failures 0
## cut
sub foo { die; }
sub bar { croak; }
sub baz { confess; }
sub bar_C { Carp::croak; }
sub baz_C { Carp::confess; }
sub quux { exec; }
sub quux2 { exit; }
sub quux3 { throw 'nuts'; }
#-----------------------------------------------------------------------------
## name Final return is present, but conditional
## failures 5
## cut
sub foo { die if $condition }
sub bar { croak unless $condition }
sub baz { exec for @condition }
sub baz { exit for @condition }
sub quux { throw 'nuts'if not $condition }
#-----------------------------------------------------------------------------
## name Compound final return is present, but conditional
## failures 1
## cut
sub foo {
if( $condition ) {
return if $today_is_tuesday;
}
else {
exit unless $today_is_wednesday;
}
}
#-----------------------------------------------------------------------------
## name Custom terminals
## parms { terminal_funcs => 'bailout abort quit' };
## failures 0
## cut
sub foo { if ($condition) { return 1; }else{ abort } }
sub bar { if ($condition) { bailout }else{ return 1 } }
sub baz { quit }
#-----------------------------------------------------------------------------
## name ForLoop is a QuoteLike::Words
## failures 0
## TODO PPI misparses the for loop.
## cut
sub foo {
for my $thingy qw<blah> {}
return;
}
##############################################################################
# Local Variables:
# mode: cperl
# cperl-indent-level: 4
# fill-column: 78
# indent-tabs-mode: nil
# c-indentation-style: bsd
# End:
# ex: set ts=8 sts=4 sw=4 tw=78 ft=perl expandtab shiftround :