[Dancer-users] flow control

Maurice Mengel mauricemengel at gmail.com
Wed Aug 25 06:50:53 CEST 2010


Hi all,

am I the only one who struggles with this?

Maurice

package dancer_test;
use Dancer ':syntax';

our $VERSION = '0.1';

get '/1' => sub {
	#You put all the code here,
	#collect all the output and then just return it
    #via template or as html etc.
	return "I wanna hold your hand"; #works
};

get '/2' => sub {
	#you don't even have to write a return
	"I wanna hold your hand"; #works too
	#let's call it a "magic return" since there is no return
	#seems to be a feature of perl not of dancer
};

get '/3' => sub {
	#works only as long as you don't have anything after the return value
	"I wanna hold your hand"; #does NOT work
	my $i;
};

get '/4' => sub {
	#sometimes Dancer displays the last variable (magic return)
	my $out="I wanna hold your hand";
};

get '/5' => sub {
	#return values from a sub
	five();
	#I find this one a bit spooky
};

sub five{
	#this outputs the content of $out although no return anywhere
	#so we might call it "magic return in a sub"
	my $out="I wanna hold your hand";
}

get '/6' => sub {
	six(); #returns 1 for success, not the content of $out
};

sub six{
	#this outputs the content of $out although no return anywhere
	my $out="I wanna hold your hand";
	debug "I get here of course";
}


get '/7' => sub {
	seven();
};

sub seven {
	#this seems more proper than six
	my $out="I wanna hold your hand";
	return $out;
	debug "I never get here of course";
}

get '/8' => sub {
	eight(); # does not output anything
	eight(); # does output once
    #I find this one a bit unintuitive
};

sub eight{
	#same as no. 5
	my $out="I wanna hold your hand";
}

get '/81' => sub {
	eight(); # does not output anything
	eight(); # does not output anything
	debug "Does output a one for success";
    #I find this one a bit unintuitive
};


get '/9' => sub {
	#if you actually want the return value twice in your output
	my $r=nine();
	$r.=nine();
};

sub nine {
	#I consider this good style
	return "testing seven";
}

get '/10' => sub {
	#works just as 9
	my $r=ten();
	$r.=ten();
};

sub ten {
	#as 9 but with magic return value
	"testing seven";
}

get '/11' => sub {
	#i want to stop if any errors are returned
	eleven_one(); #does not display anything
	eleven_two(); #displays "I don't ever want to get here";
};

sub eleven_zero{}

sub eleven_one{
	#do this and that
	#if I encounter an error
	#if I don't encounter an error I return
	#nothing like in eleven_zero
	my $error="code 101";
	return $error;
}

sub eleven_two{
	return "I don't ever want to get here";
}


get '/11b' => sub {
	#result is as in 11
	eleven_three(); #does not display anything
	eleven_two(); #displays "I don't ever want to get here";
};

sub eleven_three{
	#Dancer keyword halt does not work in this sub
	return halt "I don't ever want to get here";
	#halt works only in a filter like before
}

get '/11c' => sub {
	#result is different from 11, but never returns eleven_two even if first
	#one returns nothing (see 11d)
	return eleven_one(); #displays "code 101"
	eleven_two(); #never gets there
};

get '/11d' => sub {
	#result is different from 11
	return eleven_zero(); #returns nothing
	eleven_two(); #never gets there
};

get '/11e' => sub {
	#gets to eleven_two only if no error returned from eleven_one
	#see 11f
	my $ret=eleven_one();
	return $ret if $ret;
	$ret=eleven_two();
	return $ret if $ret;
};

get '/11f' => sub {
	#gets to eleven_two only if no error returned from eleven_zero
	my $ret=eleven_zero();
	return $ret if $ret;
	$ret=eleven_two();
	return "I do want to get here now" if $ret;
};

get '/11g' => sub {
	#returns emptys string
	my $ret=eleven_zero();
	return $ret;
	$ret=eleven_two();
	return "I do want to get here now";
};

#how does it look if we use OO?

true;


More information about the Dancer-users mailing list