Hi Kadir

For test3 I think you were expecting the behaviour of this code

get '/test3/:name' => sub {
    "Hello there, " .
    (defined param('name') ? param('name') : "whoever you are!");
};

but you were getting the behaviour of this code

get '/test3/:name' => sub {
    ("Hello there, " .  defined param('name')) ?
      param('name') : "whoever you are!";
};

The reason for this is that '.' has higher operator precedence than '?:'

http://perldoc.perl.org/perlop.html#Operator-Precedence-and-Associativity

Hope that helps!

Andrew


On Fri, Apr 3, 2015 at 6:59 PM, D Perrett <perrettdl@googlemail.com> wrote:

In perl, the value of the last statement executed in a code block is it's return value, an explicit return is only needed if you want to exit the chose block earlier than the last statement. Not sure why your third example isn't working for you. Have you restarted your dancer server since you edited the code?

Daniel

On 3 Apr 2015 18:30, "Kadir Beyazlı" <kadirbeyazli@gmail.com> wrote:
Hi All,

I am novice at Dancer, I am sure my question is very easy for you but I decided to ask because I failed at the beginning of my study.

I started reading following manual :
I installed Dancer2, placked up it and opened web page from localhost.
Everything is OK until here.

There is following info at manual:

The code block given to the route handler has to return a string which will be used as the content to render to the client.

It is clear for following example

get '/test1/:name' => sub {
    return "Hi there " . params->{name};
};

because it returns a string and when I write http://localhost:5000/test1/kadir to browser I see  Hi there kadir which is the string I expect to see

But next example is as follow:

get '/test2/:name' => sub {
    "Hey ".param('name').", welcome here!";
};

It does not return anything. Because there is no return keyword.
Despite this I see   Hi there kadir  when I write http://localhost:5000/test2/kadir
But above red background colored sentence says that it must return a value?

Next example is stranger:

get '/test3/:name' => sub {
    "Hello there, " . defined param('name')
                    ? param('name')
                    : "whoever you are!";
};


Again there is no return keyword. When I write http://localhost:5000/test3/kadir I see only kadir. But at test2 example, I saw all words despite there is no return keyword. So what is rule?
--
Kadir Beyazlı
Computer Engineer

_______________________________________________
dancer-users mailing list
dancer-users@dancer.pm
http://lists.preshweb.co.uk/mailman/listinfo/dancer-users


_______________________________________________
dancer-users mailing list
dancer-users@dancer.pm
http://lists.preshweb.co.uk/mailman/listinfo/dancer-users




--
Andrew Solomon

Mentor@Geekuni http://geekuni.com/
http://www.linkedin.com/in/asolomon