[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